【发布时间】:2012-07-03 20:55:34
【问题描述】:
我没有从脚本中获得预期的效果。我希望密码包含 A-Z、a-z、0-9 和特殊字符。
- A-Z
- a-z
- 0-9 >= 2
- 特殊字符 >= 2
- 字符串长度 >= 8
所以我想强制用户使用至少 2 个数字和至少 2 个特殊字符。好的,我的脚本有效,但迫使我背靠背使用数字或字符。我不想要那个。例如密码 testABC55$$ 是有效的 - 但我不希望这样。
相反,我希望 test$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';
【问题讨论】:
-
好的,那段代码有什么问题?
-
我很确定,您可以将它组合成一个正则表达式。
-
代码可以正常工作,但不能达到预期的效果。注意我上面的 pw 示例
-
我只是在强制用户设置更安全的密码。我如何“阻止”你,达贡?我没有看到问题。在我看来,您的“首选密码”可能很弱。
-
简单的答案是,不要使用正则表达式。正则表达式不是为此而设计的,您可以根据自己的意愿扭曲其手臂所需要付出的努力可以用来轻松创建更有效的解决方案。