PHP正则表达式:如何将字母数字字符列入白名单?

时间:2014-08-07 17:33:31

标签: php regex whitelist

有谁能告诉我为什么1(黑名单)不会抛出意外的结束错误而2(白名单)会这样做? 1并未过滤掉所有特殊字符,因此我想使用白名单方法。我得到的错误似乎与语法有关但我无法发现它。感谢您帮助我结束我的痛苦。

php

(1)
if (preg_match('/[\'^£$%&*()}{@#~?><>,|=_+¬-]/', $posteduid))
{
$error = "You may not use special characters in your username";
}

(2)
if (!preg_match("#^[a-zA-Z0-9]+$#", $posteduid))
{
$error = "You may not use special characters in your username";
}

错误消息:

Parse error: syntax error, unexpected $end in /.../join.php on line 346

1 个答案:

答案 0 :(得分:3)

当你注释掉这一行时

if (preg_match('/[\'^£$%&*()}{@#~?><>,|=_+¬-]/', $posteduid))

使用//它仍然会看到?>并停止解析PHP,从而导致一个奇怪的错误。只需删除该部分或使用/* */ - 评论。您的代码示例在白名单上没有任何问题。