PHP - 密码正则表达式要求

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

  • 长度在 8-30 个字符之间

  • 至少包含 1 个小写字母 (az)

  • 至少包含 1 个大写字母 (AZ)

  • 包含至少 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
  }


慕森王
浏览 84回答 2
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
打开App,查看更多内容
随时随地看视频慕课网APP