Функция PHP filter_var (), генерирующая предупреждение - PullRequest
0 голосов
/ 09 сентября 2009

Кто-нибудь знает, почему функция filter_var () ниже генерирует предупреждение? Существует ли ограничение на количество символов в классе символов?

$regex = "/^[\w\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\072\073\074\075\076\077\100\133\134\135\136\140\173\174\175\176]*$/";

$string = "abc";

if(!filter_var($string, FILTER_VALIDATE_REGEXP, array("options" => array("regexp"=>$regex))))
{
    echo "dirty";
}

else
{
    echo "clean";
}

Предупреждение: filter_var () [function.filter-var]: неизвестный модификатор ':'

Ответы [ 2 ]

3 голосов
/ 09 сентября 2009

Ваше регулярное выражение интерпретируется PHP как эта строка:

string '/^[\w!"#$%&'()*+,-./:;<=>?@[\]^`{|}~]*$/' (length=40)

(используйте var_dump на $ regex, и вы получите это)

Прямо в середине вашего регулярного выражения, так что есть косая черта; так как вы используете косую черту для ограничения регулярного выражения (это первый символ $regex) , PHP считает, что этот слеш в середине обозначает конец регулярного выражения.

Итак, PHP думает, что ваше регулярное выражение на самом деле:

/^[\w!"#$%&'()*+,-./

Каждый символ, который следует после завершающего слеша, интерпретируется как модификаторы .

И ':' не является допустимым модификатором.

Возможно, вы захотите избежать косой черты в середине регулярного выражения ;-)
Как и некоторые другие персонажи, кстати ...

Решением для этого может быть использование функции preg_quote.

0 голосов
/ 10 сентября 2009

Вот текущее рабочее регулярное выражение:

/^[\w\041\042\043\044\045\046\047\050\051\052\053\054\134\055\056\134\057\072\073\074\075\076\077\100\133\134\134\134\135\134\136\140\173\174\175\176]*$/i
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...