【问题标题】: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 个。
【问题讨论】:
标签:
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。