正则表达式密码 PHP
2022-08-30 12:30:16
我在网上找到了一个脚本,它在JavaScript中有一个密码正则表达式。我仍然想使用它,但为了更安全,我也想使用PHP来验证我的密码,但我对正则表达式毫无用处。
要求:
- 必须至少为 8 个字符
- 必须至少包含 1 个数字
- 必须至少包含一个大写字符
- 必须至少包含一个小写字符
如何构造正则表达式字符串来满足这些要求?
我在网上找到了一个脚本,它在JavaScript中有一个密码正则表达式。我仍然想使用它,但为了更安全,我也想使用PHP来验证我的密码,但我对正则表达式毫无用处。
要求:
如何构造正则表达式字符串来满足这些要求?
^\S*(?=\S{8,})(?=\S*[a-z])(?=\S*[A-Z])(?=\S*[\d])\S*$
从佐尔希德的好人那里。
^
:锚定到字符串的开头\S*
:任意字符集(?=\S{8,})
:至少长度 8(?=\S*[a-z])
:包含至少一个小写字母(?=\S*[A-Z])
:和至少一个大写字母(?=\S*[\d])
:和至少一个数字$
:锚定在字符串的末尾要包含特殊字符,只需添加 ,这是非单词字符。(?=\S*[\W])
我发现在一个大正则表达式中执行此操作有点像代码维护的噩梦。对于查看您的代码的其他人来说,拆分它要容易得多,并且它还允许您提供更具体的错误消息。
$uppercase = preg_match('@[A-Z]@', $password);
$lowercase = preg_match('@[a-z]@', $password);
$number = preg_match('@[0-9]@', $password);
if(!$uppercase || !$lowercase || !$number || strlen($password) < 8) {
// tell the user something went wrong
}