我有以下单个正则表达式,我想使用AND条件对其进行组合,我正在使用它们来验证密码
。 [A-Z] +。-验证大写(最小一个字母大写)
。 [0-9] +。-验证号码(至少一个号码)
。 [a-z] +。-验证小写字母(至少一个小写字母)
。{8,}-验证最小字符8
。 [^ A-Za-z0-9]。-验证特殊字符(至少一个特殊字符)
(。)\ 1-验证连续字符(无连续字符)
现在我要分别验证每个字符,但我只想在一个功能中完成
我尝试了以下合并方式
/ ^((。)\ 1)(。 [AZ] +。)(。 [az] +。)(。 [0- 9] +。)(。 [^ A-Za-z0-9]。)。* $ /
上面没有所有的表达式,但是我试图显示我的表现。
答案 0 :(得分:2)
一个选择是使用negated character classes使用一组正向先行:
^(?=[^A-Z]*[A-Z])(?=[^a-z]*[a-z])(?=[^0-9]*[0-9])(?!.*(.)\1)(?=[a-zA-Z0-9]*[^A-Za-z0-9\s])\S{8,}$
这将匹配:
^
字符串的开头(?=[^A-Z]*[A-Z])
断言大写(?=[^a-z]*[a-z])
断言小写(?=[^0-9]*[0-9])
断言(?!.*(.)\1)
声明没有连续的字符(?=[a-zA-Z0-9]*[^A-Za-z0-9\s])
声明除列出的字符以外的其他char,包括空格char(假定不允许)\S{8,}
匹配8次以上非空格字符$
字符串结尾请注意,\S
允许的字符是广泛匹配,您可以使用字符类指定允许匹配的字符。