首页 > 解决方案 > 正则表达式防止同一字符连续出现超过 3 次

问题描述

我想要一个 javascript 函数,它可以防止同一字符在输入字段中连续出现 3 次以上。我知道如何通过 1 次重复轻松做到这一点。例如...

function deleteit() {message.value=message.value.replace(/(.)\1/g,'')} 
<input type='text' id='message' onkeyup='deleteit()'>

如果您在此处多次输入相同的字符,则第二个字符将被删除。我想最多允许 3 个并在 4 号删除。例如,“Yippy!!!” 可以接受,但输入“Yippy!!!!” 将删除第 4 个感叹号。我尝试将正则表达式更改为/(..)\1/g That does work,但不完全。它正在删除 2 个“组”字符,所以如果我输入“YOYO”之类的内容,它会删除它。如何将 4 个或更多相同字符更改为 3 个。

标签: javascriptregexvalidationinput

解决方案


您可以使用

function deleteit() {message.value=message.value.replace(/(.)(\1{2})\1+/g,'$1$2')}
<input type='text' id='message' onkeyup='deleteit()'>

请参阅正则表达式演示详情

  • (.)- 捕获组 1 ( $1):除换行符以外的任何字符
  • (\1{2})- 捕获组 2 ( $2):两个字符与组 1 中捕获的字符相同
  • \1+- 与第 1 组中捕获的字符相同的字符出现一次或多次。

或者,或者:

function deleteit() {message.value=message.value.replace(/((.)\2{2})\2+/g,'$1')}
<input type='text' id='message' onkeyup='deleteit()'>

正则表达式详细信息

  • ((.)\2{2})- 组 1($1在替换模式中指的是该组值):
    • (.)- 第 2 组:除换行符以外的任何字符
    • \2{2}- Group 2 值的两次出现
  • \2+- 一次或多次出现第 2 组值

请参阅正则表达式演示


推荐阅读