我对regualr表达式全新,我必须构建一个具有以下必要条件:
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
答案 0 :(得分:2)
我认为您不需要外部捕获组,因此您可以省略它。
您可以先使用前瞻$
(?=.{8,15}$)
结尾前的8,15个字符
如果所有前瞻符合,则匹配任何字符一次或多次.+
试试这样:
^(?=.{8,15}$)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z])(?!.*(.)\1{2}).+$