filter_input с 0 возвращает false

Сейчас я использую filter_input и хочу, чтобы он возвращал true для каждого числа (0-9) и false для не чисел (a-z, A-Z и т. Д.)

Теперь я использую этот сценарий (просто пример сценария, но идея та же):

<?php

$i = filter_input(INPUT_GET, 'i', FILTER_SANITIZE_NUMBER_INT);

if ($i)
{
echo 'good';
}
else
{
echo 'bad';
}

Если я использую 1-9 в качестве переменной GET (так как test.php?i=1), это показывает good,
Если я использую -Z в качестве переменной GET (так как test.php?i=a), это показывает bad, Все идет нормально.

Но если я использую 0 как переменную GET, это также плохо. Переменная может быть 0 и должна быть истинной, если переменная GET равна 0.

Кто-нибудь может объяснить мне, почему 0 возвращает false? Я имею в виду, что переменная GET установлена, а 0 — это число. Это только потому, что 0 — значение Фолси?

-1

Решение

0 это falsey значение в PHP. if (0) является false,

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

В дальнейшем, filter_input либо возвращает false, null или же 0 Вот. Они все одинаково falsey, имея в виду == false, Вы должны четко различать их:

$i = filter_input(INPUT_GET, 'i', FILTER_VALIDATE_INT);

if ($i === null) {
echo 'value not provided';
} else if ($i === false) {
echo 'invalid value';
} else {
echo 'good';
}
2

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

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

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