1

好的,我正在使用以下代码(其中$password= 密码后变量)。这是大型表单验证代码的一部分,这行代码似乎在不应该触发的时候触发。恐怕它的某些部分已被弃用。我试过输入pass123APassword121Password,它们都触发了这段代码。为什么?

elseif(preg_match("/^[a-zA-Z0-9]$/", $password) == 0)
echo('Error - the password can only contain alpha-numeric chars!');
4

2 回答 2

3
preg_match("/^[a-zA-Z0-9]$/", $password)

...将仅匹配单字符密码。

preg_match("/^[a-zA-Z0-9]*$/", $password)

...应该工作得更好。

也许我应该注意这也将匹配一个密码,但我假设您单独检查长度。

编辑:如果您由于 SQL 不安全而限制密码,您应该真正切换到 PDO 或 MySQLi 并使用参数化查询,这将允许您存储任何字符串而无需对特殊字符(如')进行特殊处理,这将使 SQL 全部在您的网站上更安全。

此外,如果您以明文形式存储密码,您应该考虑对它们进行散列处理:)

于 2013-08-03T07:26:45.020 回答
0

你可以这样使用:+$

if (...)
   // do anything
elseif(!preg_match("/^[a-zA-Z0-9]+$/", $password))
   echo('Error - the password can only contain alpha-numeric chars!');

使用+$而不是*$.

*允许空字符串。如果$password发送为空,则不匹配。

于 2013-08-03T07:35:01.710 回答