Сейчас я использую 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 — значение Фолси?
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';
}
Других решений пока нет …