REGEX 2数字或特殊字符



,所以我正在尝试创建一个正则表达式:

最小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 非数字字符的两个重复,然后是数字

最新更新