我正在尝试创建一个满足以下密码要求的正则表达式。
长度必须在8到16个字符之间
^(?=.*\d|[!@#\$%\^&])(?=.*[a-z])(?=.*[A-Z]).{8,16}$
除OR部分外,几乎可以正常运行。 它会验证Tester01和Tester0%,但不会验证Tester%$或带有两个符号的任何东西,以防万一用户没有输入数字。我还尝试将\ d放在方括号内,以为我不得不将数字和符号分开,但这没用。
答案 0 :(得分:0)
您的交替条件不正确。相反,您只需在特殊字符括号内滑动\d
并将正则表达式更改为此,
^(?=.*[\d!@#\$%\^&])(?=.*[a-z])(?=.*[A-Z]).{8,16}$
现在,您(?=.*[\d!@#\$%\^&])
的表现将完全符合您的期望。它将确保一个字符是任何数字或字符类中提到的其他特殊字符。
您的(?=.*\d|[!@#\$%\^&])
前瞻失败的原因是,您的第一个交替条件是.*\d
,第二个只是[!@#\$%\^&]
,似乎正确书写的应该是这个,或者>
(?=.*\d|.*[!@#\$%\^&])
OR
(?=.*(\d|[!@#\$%\^&]))
如果真的像我上面写的那样书写,您根本不需要任何替代,您只需将\d
放在字符集本身中,就像这样,
(?=.*([\d!@#\$%\^&]))
答案 1 :(得分:0)
使用对比原则,多次超前。
^
(?=[^A-Z]*[A-Z])
(?=[^a-z]*[a-z])
(?=[^\d!@#\$%\^&]*[^\d!@#\$%\^&])
.{8,16}
$
但是here(为什么密码验证不正确?),请参阅please read this post as well。