регулярное выражение — filter_var REGEXP не найдет ноль

Мне интересно, почему я не могу сопоставить число ноль => 0 с функцией PHPs filter_var, а с помощью PHP preg_match он может найти ноль.

Кто-нибудь может мне помочь, как я заставил это работать filter_var или это ошибка?

Фрагмент кода:

if(!filter_var("0", FILTER_VALIDATE_REGEXP, array("options" => array("regexp" => '/^[0-9]+$/i')))) {
print_r("NO MATCH!");
} else {
print_r("MATCH!");
}

Результат: НЕ СОВПАДАЕТ!

Фрагмент кода:

if(preg_match('/^[0-9]+$/i', "0") == 0) {
print_r("NO MATCH!");
} else {
print_r("MATCH!");
}

Результат: МАТЧ!

0

Решение

Функция PHP filter_var() возвращает отфильтрованный результат. Из руководства по PHP:

Возвращаемые значения

Возвращает отфильтрованные данные или FALSE в случае сбоя фильтра.

Вы практически сделали ту же ошибку, что и пользователь, спрашивающий в filter_var с использованием FILTER_VALIDATE_REGEXP: Функция не проверяет ввод, она фильтрует его. Если он не совпадает, он вернется FALSE в противном случае он вернет отфильтрованные данные. И это строка "0" который оценивает false в PHP, если вы приведете его к логическому, что происходит с помощью оператора отрицания (!).

Поэтому вы проверили:

if (!"0") {
print_r("NO MATCH!");
} else {
print_r("MATCH!");
}

Что это такое. Таким образом, вы выводите о «совпадении», но вы «если» о самом значении, а не об операции сопоставления.

Напишите лучший код, просто используя простое назначение переменных:

$var    = "0";
$result = filter_var($var, FILTER_VALIDATE_REGEXP, array("options" => array("regexp" => '/^[0-9]+$/i')));

if (!$result) {
print_r("NO MATCH!");
} else {
print_r("MATCH!");
}

Это позволит вам легко находить неисправности и менять их:

var_dump($result); // string(1) "0"

И далее:

$var    = "0";
$result = filter_var($var, FILTER_VALIDATE_REGEXP, array("options" => array("regexp" => '/^[0-9]+$/i')));

if ($var !== $result) {
print_r("NO MATCH!");
} else {
print_r("MATCH!");
}

Это то, что вы, возможно, хотели написать ранее. Выход:

MATCH!
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]