我对正则表达式完全陌生,我必须构建一个具有以下先决条件的表达式:
8 到 15 个字符
至少 1 个字母字符 (a-z,A-Z)
至少 1 个非字母(所有其他)
至少 1 个大写字母
至少 1 个非大写字母
最多 2 个连续的相等字符(例如:接受“g”,接受“gg”,不接受“ggg”)
我试过这个,但它只适用于最多 5 个连续的相等字符(不明白为什么)。我做错了什么?
var regexp = /^((?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z])(.{8,15})(?!.*(.)\1{2}))$/;
编辑它适用于
asdfghjkl1Q
asdfghjkl1QQQ
asdfghjkl1QQQQQ
它不适用于
asdfghjkl1QQQQQQ
asdfghjkl1QQQQQq
我想要获得的是: 工作:
asdfghjkl1Q
asdfghjkl1QQ
asdfghjkl11
不适用于:
asdfghjkl1QQQ
asdfghjkl1QQq
asdfghjkl111
最佳答案
我认为您不需要外部捕获组,因此您可以省略它。
您可以先检查 8,15 个字符,直到字符串 $
结束。使用前瞻 (?=.{8,15}$)
如果所有前瞻匹配,则匹配任何字符一次或多次.+
像这样尝试:
^(?=.{8,15}$)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z])(?!.*(.)\1{2}).+$
关于javascript - 最多包含 2 个连续相等字符和其他选项的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49433333/