我正在尝试将密码参数设置为8-20个字符长,至少一个大写字符,数字和符号。我已经编写了这样的代码
(preg_match ('/^(\W+)(\d+)([A-Z]+)([a-z]+){8,20}$/', $_POST['pass1']) )
我对我的代码的解释如下:
W+ one or more symbols (non alpha numeric)
d+ one or more numbers
[A-Z]+ one or more uppercase characters
[a-z]+ one or more lower case characters
{8,20} string length min 8 max 20
当我输入密码为Anyhelp4me时!我收到无效的密码消息。你有什么建议。
答案 0 :(得分:2)
不要使用一个正则表达式来完成所有操作。如果您使用多个正则表达式对preg_match进行多次调用,将来会更易于维护,可理解并且更容易更改。
$password_is_ok =
preg_match( '/\W/', $pass ) &&
preg_match( '/\d/', $pass ) &&
preg_match( '/[a-z]/', $pass ) &&
preg_match( '/[A-Z]/', $pass ) &&
strlen( $pass ) >= 8 &&
strlen( $pass ) <= 20;
下一个必须阅读你的代码(可能是你)的人比你可以编写的任何单正则表达式怪物更容易理解和理解。
答案 1 :(得分:0)
好的......我尝试了之前的推荐,并且只强加了“8,10”限制。我在stackoverflow上找到了这个“创建用于密码验证的preg_match允许(!@#$%)”并修改了该响应中显示的代码,如下所示:
/^(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*\W)[0-9A-Za-z!@#$%]{8,20}$/
我已经多次测试了它确实有效。您必须至少有一个数字,一个大写,一个小写和一个指定的符号(!@#$%)和8到20个字符。