使用preg_match的密码参数


Password parameters using preg_match

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

不要用一个正则表达式来完成所有操作如果您使用多个正则表达式多次调用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;

对于下一个必须阅读你的代码的人(可能是你)来说,这比你能炮制的任何一个正则表达式怪物都更容易阅读和理解。

好的。。。我尝试了之前的建议,它只施加了"8,10"的限制。我在stackoverflow"Create preg_match for password validation allow(!@#$%)"上发现了这一点,并修改了该响应中的代码如下:

/^(?=.*'d)(?=.*[A-Z])(?=.*[a-z])(?=.*'W)[0-9A-Za-z!@#$%]{8,20}$/

我已经测试了好几次,它确实有效。您必须至少有一个数字、一个大写字母、一个小写字母和一个指定的符号(!@#$%),并且包含8到20个字符。