【发布时间】:2020-10-09 20:11:05
【问题描述】:
我正在尝试验证新用户帐户的密码是否符合以下条件:
- 8-30 个字符之间
- 至少包含 1 个小写字母 (a-z)
- 至少包含 1 个大写字母 (A-Z)
- 至少包含以下特殊字符之一:_-!#*@&
我有这样的功能:
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
}
【问题讨论】:
-
我认为你必须为模式使用分隔符。
-
你能给我看一个你在说什么分隔符的例子吗?究竟应该放在哪里?
-
字符类中的连字符应该在开始/结束或转义
return preg_match("~^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[-_!#*@&])[A-Za-z\d_!#*@&_]{8,30}$~", $str);
标签: php regex passwords alphanumeric