用于密码验证的PHP正则表达式

时间:2012-07-03 20:55:35

标签: php regex

我没有从脚本中获得所需的效果。我希望密码包含A-Z,a-z,0-9和特殊字符。

  • A-Z
  • a-z
  • 0-9> = 2
  • 特殊字符> = 2
  • 字符串长度> = 8

所以我想强迫用户使用至少2位数字和至少2个特殊字符。好吧我的脚本有效,但迫使我背对背使用数字或字符。我不希望这样。例如密码testABC55 $$是有效的 - 但我不希望这样。

相反,我希望测试$ ABC5#8有效。所以基本上数字/特殊字符可以相同或差异 - >但必须在字符串中拆分。

PHP代码:

$uppercase = preg_match('#[A-Z]#', $password);
$lowercase = preg_match('#[a-z]#', $password);
$number    = preg_match('#[0-9]#', $password);
$special   = preg_match('#[\W]{2,}#', $password); 
$length    = strlen($password) >= 8;

if(!$uppercase || !$lowercase || !$number || !$special || !$length) {
  $errorpw = 'Bad Password';

3 个答案:

答案 0 :(得分:13)

使用“可读”格式(可以将其优化为更短),因为你是正则表达式新手>>

^(?=.{8})(?=.*[A-Z])(?=.*[a-z])(?=.*\d.*\d.*\d)(?=.*[^a-zA-Z\d].*[^a-zA-Z\d].*[^a-zA-Z\d])[-+%#a-zA-Z\d]+$

在上面的正则表达式中将您的特殊字符集添加到上一个[...](我现在放在那里只是 - +%#)。


说明:

^                              - beginning of line/string
(?=.{8})                       - positive lookahead to ensure we have at least 8 chars
(?=.*[A-Z])                    - ...to ensure we have at least one uppercase char
(?=.*[a-z])                    - ...to ensure we have at least one lowercase char
(?=.*\d.*\d.*\d                - ...to ensure we have at least three digits
(?=.*[^a-zA-Z\d].*[^a-zA-Z\d].*[^a-zA-Z\d]) 
                               - ...to ensure we have at least three special chars
                                    (characters other than letters and numbers)
[-+%#a-zA-Z\d]+                - combination of allowed characters
$                              - end of line/string

答案 1 :(得分:1)

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

测试$ ABC5#8无效,因为您要求超过2位数和规格符号

A-Z
a-z
0-9 > 2
special chars > 2
string length >= 8

答案 2 :(得分:0)

用于匹配包含特殊字符的字符串长度:

$ result = preg_match('/ ^(?=。[az])(?=。[AZ])(?=。\ d)(?=。[^ A-Za-z \ d])[ \ s \ S] {6,16} $ /',$ string);

答案解释:https://stackoverflow.com/a/46359397/5466401