Проблема белого списка RegEx - PullRequest
3 голосов
/ 30 августа 2010

Я немного растерялся.Я выполняю все свои входные данные через основную функцию очистки, которую я пишу, чтобы разрешить только определенные символы, но символы, такие как [], все еще разрешены.

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

Есть идеи, почему это происходит?

Ответы [ 4 ]

7 голосов
/ 30 августа 2010

У вас есть опечатка в строке шаблона, которая вызывает проблему

/[^a-zA-<b>z</b>0-9_-]
Вы хотите вместо этого A- Z .

Кстати: вас может заинтересовать класс символов [: alnum:] и / или модификатор PCRE_CASELESS

4 голосов
/ 30 августа 2010

Добавление к другим ответам.

[a-zA-Z0-9_] совпадает с \w, слово char.

Так что [^a-zA-Z0-9_-] можно записать как [^\w-]

2 голосов
/ 30 августа 2010

Вы должны использовать заглавные буквы "z": "/ [^ a-zA-Z0-9 _-] /"

0 голосов
/ 20 сентября 2010

Не принимайте как должное, что [a-zA-Z0-9_] - это то же самое, что и \w.На http://se.php.net/manual/en/regexp.reference.escape.php указано, что \w "может отличаться, если происходит сопоставление для конкретной локали".

...