我需要创建一个具有以下要求的正则表达式:密码必须至少包含8个字符和最多12个字符,至少1个大写字母,至少3个小写字母,至少1位数字和至少1个特殊字符。组(#*。!?$),不带括号。第一个字符必须是大写或小写字母。密码中不能连续出现两个相同的字符。 我做了这个,但是没用:
^(?=.{8,12}$)(([a-z]|[A-Z])(?=.*\d){1,}(?=.*[a-z]){3,}(?=.*[A-Z]){1,}(?=.*[!.?*$#])\2?(?!\2))+$
我试图用Abcd123!测试它,但是它不起作用。谁能解释我在哪里犯了错误,以及我实际上在这里做了什么?
答案 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次以上$
声明字符串的结尾