正则表达式不起作用-至少1个大写字母,至少3个小写字母,已定义组中的至少1个特殊字符(更多说明)

时间:2019-03-23 13:39:51

标签: php regex passwords

我需要创建一个具有以下要求的正则表达式:密码必须至少包含8个字符和最多12个字符,至少1个大写字母,至少3个小写字母,至少1位数字和至少1个特殊字符。组(#*。!?$),不带括号。第一个字符必须是大写或小写字母。密码中不能连续出现两个相同的字符。 我做了这个,但是没用:

^(?=.{8,12}$)(([a-z]|[A-Z])(?=.*\d){1,}(?=.*[a-z]){3,}(?=.*[A-Z]){1,}(?=.*[!.?*$#])\2?(?!\2))+$

我试图用Abcd123!测试它,但是它不起作用。谁能解释我在哪里犯了错误,以及我实际上在这里做了什么?

1 个答案:

答案 0 :(得分:1)

您使用{1,}之类的量词作为不正确的前瞻。

我认为您打算像这样使用先行提示

^(?=.{8,12}$)(?=[^A-Z]*[A-Z])(?=\D*\d)(?=(?:[^a-z]*[a-z]){3})(?=[^\s#*.!?$]*[#*.!?$])(?!.*(.)\1)(?:[a-z]|[A-Z])[a-zA-Z0-9#*.!?$,]+$

关于图案

  • ^字符串的开头
  • (?=.{8,12}$)断言长度8-12
  • (?=[^A-Z]*[A-Z])声明一个大写字符
  • (?=\D*\d)声明数字
  • (?=(?:[^a-z]*[a-z]){3})声明3个小写字符
  • (?=[^\s#*.!?$]*[#*.!?$])声明特殊字符
  • (?!.*(.)\1)声明不连续2个字符
  • (?:[a-z]|[A-Z])以大写或小写字符开头
  • [a-zA-Z0-9#*.!?$,]+匹配角色类中列出的任何内容1次以上
  • $声明字符串的结尾

Regex demo | Php demo