正则表达式密码 PHP

2022-08-30 12:30:16

我在网上找到了一个脚本,它在JavaScript中有一个密码正则表达式。我仍然想使用它,但为了更安全,我也想使用PHP来验证我的密码,但我对正则表达式毫无用处。

要求:

  • 必须至少为 8 个字符
  • 必须至少包含 1 个数字
  • 必须至少包含一个大写字符
  • 必须至少包含一个小写字符

如何构造正则表达式字符串来满足这些要求?


答案 1
^\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])


答案 2

我发现在一个大正则表达式中执行此操作有点像代码维护的噩梦。对于查看您的代码的其他人来说,拆分它要容易得多,并且它还允许您提供更具体的错误消息。

$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
}

推荐