提问者:小点点

PHP-密码正则表达式要求


我正在尝试验证新用户帐户的密码是否符合以下条件:

  • 长度介于8-30个字符之间
  • 至少包含1个小写字母(a-z)
  • 至少包含1个大写字母(A-Z)
  • 至少包含以下1个特殊字符:_-!#*@&;

我有一个这样的函数:

function validPassword($str) {
    return preg_match("^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[_-!#*@&])[A-Za-z\d_-!#*@&]{8,30}$", $str);
}

但我犯了个错误。 它应该为这个密码返回“true”,例如:HelloWorld123!

但它却返回false。 知道哪里可能出了问题吗?

if (validPassword($password) == true) {
  // good password
}

共2个答案

匿名用户

你忘了转义'-'和分隔符。。。

function validPassword($str) {
  return preg_match("/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[_\-!#*@&])[A-Za-z\d_\-!#*@&]{8,30}$/", $str);
}

匿名用户

您的正则表达式有错误,这就是为什么没有匹配的原因。

将正则表达式更改为:

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[_\-!#*@&])[A-Za-z\d_\-!#*@&]{8,30}$

在此查看正在运行的正则表达式:https://regex101.com/r/ogppeb/1