RegEx白名单问题

时间:2010-08-30 12:01:32

标签: php regex string preg-replace

我有点困惑。我通过我写的基本清理函数运行所有输入,只允许某些字符,但[]等字符仍然被允许。

function sanitize($input) {
$pattern = "/[^a-zA-z0-9_-]/";
$filtered = preg_replace($pattern, "", $input);
return $filtered;}

知道为什么会这样做吗?

4 个答案:

答案 0 :(得分:7)

你的模式字符串中有一个错误导致问题

/[^a-zA-z0-9_-]
你想要A- Z


btw:你可能对角色课[:alnum:]和/或PCRE_CASELESS modifier

感兴趣

答案 1 :(得分:4)

添加其他答案。

[a-zA-Z0-9_]\w相同,单词为char。

因此[^a-zA-Z0-9_-]可以写成[^\w-]

答案 2 :(得分:2)

你必须把第二个“z”大写:“/ [^ a-zA-Z0-9 _-] /”

答案 3 :(得分:0)

不要理所当然地认为[a-zA-Z0-9_]\w相同。在http://se.php.net/manual/en/regexp.reference.escape.php上,如果发生特定于区域设置的匹配,则表示\w“可能会有所不同。”