我没有从脚本中获得所需的效果。我希望密码包含A-Z,a-z,0-9和特殊字符。
所以我想强迫用户使用至少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';
答案 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);