,所以我正在尝试创建一个正则表达式:
最小12个字符,需要大写,需要小写,需要2个数字值或2个特殊字符。
目前我有以下内容:
~^(?=P{Ll}*p{Ll})(?=P{Lu}*p{Lu})(?=.*[!@#$%^&*()]|D*d).{12,}~u
哪个具有1个数字或1个特殊字符,而不是2。我尝试在或条件中添加{2}
任何帮助将不胜感激。
您应该用 (?:(?=(?:[^!@#$%^&*()]*[!@#$%^&*()]){2})|(?=(?:D*d){2}))
替换 (?=.*[!@#$%^&*()]|D*d)
lookahead。正则看起来像
'~^(?=P{Ll}*p{Ll})(?=P{Lu}*p{Lu})(?:(?=(?:[^!@#$%^&*()]*[!@#$%^&*()]){2})|(?=(?:D*d){2})).{12,}$~u'
请参阅正则演示。
LookAhead匹配与
紧随其后的位置-
(?:[^!@#$%^&*()]*[!@#$%^&*()]){2}
-除!@#$%^&*()
字符以外的任何0 字符的两个重复,然后是!@#$%^&*()
列表中的char -
|
-或 -
(?=(?:D*d){2}
-任何0 非数字字符的两个重复,然后是数字