使用preg_match的密码参数

时间:2015-03-26 17:09:05

标签: php regex

我正在尝试将密码参数设置为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时!我收到无效的密码消息。你有什么建议。

2 个答案:

答案 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个字符。