【问题标题】:Regex to prevent the same character from appearing more than 3 times in a row正则表达式防止同一字符连续出现超过 3 次
【发布时间】:2021-04-13 12:02:06
【问题描述】:

我想要一个 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 这确实有效,但不完全。它正在删除 2 个“组”字符,所以如果我输入“YOYO”之类的内容,它会删除它。如何将 4 个或更多相同字符更改为 3 个。

【问题讨论】:

  • 使用/(.)\1{2}/

标签: javascript regex validation input


【解决方案1】:

你可以使用

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

请参阅regex demo详情

  • (.) - 捕获组 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 组值出现一次或多次

请参阅regex demo

【讨论】:

    【解决方案2】:

    我原以为这就是你要找的东西:

    搜索模式:

    (.)(\1)\1+
    

    替换模式:

    $1$2
    

    https://regex101.com/r/tAFNUa/1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多