我正在尝试创建一个验证输入字符串的模式。验证规则不允许任何字符连续重复3次。
例如:
Aabcddee
- 有效。
Aabcddde
- 不有效,因为有3个 d 个字符。
目标是提供一个可以匹配上述示例之一的RegExp模式,但不能同时匹配两者。我知道我可以使用([a-z])\1{1,2}
之类的反向引用,但这只匹配顺序字符。我的问题是我无法弄清楚如何为此制作单一模式。我试过这个,但我不明白为什么它不起作用:
^(([a-z])\1{1,2})+$
这里我尝试匹配在内部组中重复1或2次的任何字符,然后如果它重复多次,我匹配该内部组。但它不是这样的。
感谢。
答案 0 :(得分:6)
检查字符串是否没有连续3次或更多次的字符(任何类型,甚至是新行):
/^(?!.*(.)\1{2})/s
您还可以检查输入字符串与此正则表达式是否匹配。在这种情况下,您还可以知道连续重复3次或更多次的字符。请注意,这与上面的完全相同,只是取消负前瞻(?!pattern)
内的正则表达式。
/^.*(.)\1{2}/s
如果您要添加验证,该字符串仅包含[a-z]
中的字符,并且您认为aaA
无效:
/^(?!.*(.)\1{2})[a-z]+$/i
正如您所看到的,i
标志(不区分大小写)会影响捕获的文本与当前输入的比较方式。
如果您想允许空字符串传递,请将+
更改为*
。
如果您想将aaA
视为有效,并且您想同时允许大写和小写:
/^(?!.*(.)\1{2})[A-Za-z]+$/
初看起来,它看起来可能与前一个相同,但由于没有i
标志,所捕获的文本不会受到不区分大小写的匹配。
以下是失败的回答,你可以忽略它,但你可以阅读它以获得乐趣。
您可以使用此正则表达式来检查字符串是否没有3个重复字符(任何类型,甚至是新行)。
/^(?!.*(.)(?:.*\1){2})/s
您还可以检查输入字符串与此正则表达式是否匹配。在这种情况下,您还可以知道重复的字符大于或等于3次。请注意,这与上面的完全相同,只是取消负前瞻(?!pattern)
内的正则表达式。
/^.*(.)(?:.*\1){2}/s
如果您要添加验证,该字符串仅包含[a-z]
中的字符,并且您认为aaA
无效:
/^(?!.*(.)(?:.*\1){2})[a-z]+$/i
正如您所看到的,i
标志(不区分大小写)会影响捕获的文本与当前输入的比较方式。
如果您想将aaA
视为有效,并且您想同时允许大写和小写:
/^(?!.*(.)(?:.*\1){2})[A-Za-z]+$/
初看起来,它看起来可能与前一个相同,但由于没有i
标志,所捕获的文本不会受到不区分大小写的匹配。
答案 1 :(得分:1)
根据您的问题,我得到您想要匹配的内容
[A-Za-z]
AND 然后这个正则表达式应该起作用:
^(?:([A-Za-z])(?:(?!\1)|\1(?!\1)))+$