好的,我正在使用以下代码(其中$password
=后置密码变量)。这是大型表单验证代码的一部分,这行代码似乎在它不应该触发时触发。我担心它的某些部分已被弃用。我尝试输入pass123A
,Password12
和1Password
,它们都会触发此代码。为什么呢?
elseif(preg_match("/^[a-zA-Z0-9]$/", $password) == 0)
echo('Error - the password can only contain alpha-numeric chars!');
答案 0 :(得分:3)
preg_match("/^[a-zA-Z0-9]$/", $password)
...只匹配单个字符密码。
preg_match("/^[a-zA-Z0-9]*$/", $password)
......应该会更好。
也许我应该注意,这也会匹配空密码,但我假设你单独检查长度。
编辑:如果由于SQL不安全而限制密码,您应该切换到PDO或MySQLi并使用参数化查询,这将允许您存储任何字符串而无需特殊处理特殊字符(如{{1} }),这将使您的网站上的SQL更安全。此外,如果你以明文形式存储密码,你应该考虑散列它们:)
答案 1 :(得分:0)
您可以这样使用:+$
if (...)
// do anything
elseif(!preg_match("/^[a-zA-Z0-9]+$/", $password))
echo('Error - the password can only contain alpha-numeric chars!');
使用+$
代替*$
。
*
允许空字符串。如果$password
发送为空,则不匹配。