【发布时间】:2013-07-29 07:27:26
【问题描述】:
我正在尝试让我的网站要求用户(当他们创建帐户时)包含 3/4 密码要求。我希望密码包含的要求是:1. 数字 2. 小写字母 3. 大写字母 4. 特殊符号/字符。这是我到目前为止的代码:
$passwordspecs='^(?=.{8, 20})(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$ | ^(?=.{8, 20})(?=.*[a-z])(?=.*[A-Z])(?=.*[@$#£&]).*$ | ^(?=.{8, 20})(?=.*\d)(?=.*[a-z])(?=.*[@$#£&]).*$ | ^(?=.{8, 20})(?=.*\d)(?=.*[A-Z])(?=.*[@$#^£&]).*$';
if(preg_match('/$passwordspecs/', $_POST['password'])) {
$results="INSERT INTO Operator (Username, Password, PermissionLevel)
VALUES ('$_POST[username]', '$_POST[password]', '$_POST[plevel]')";
echo "One user added!";
}
else {
echo '<script type="text/javascript">';
echo 'alert("Password needs to contain 3/4 requirements!")';
echo '</script>';
}
我终于能够摆脱即将出现的错误消息,但现在无论我输入 3/4 还是 4/4 密码要求,它都会直接进入 else 语句并收到警报消息。对出了什么问题有任何想法,或者是否有更简单的方法可以做到这一点?
【问题讨论】:
-
(离题)请不要这样做。你只会惹恼你的用户。
-
对单个需求使用单个正则表达式。将它们放在一个数组中,遍历它们并计数。
-
'/$passwordspecs/'=> 你需要双引号"/$passwordspecs/",否则变量不会被解析和替换 -
重要的旁注:不要将密码存储为纯文本!
-
小心你的代码容易受到 sql 注入的影响