2016-01-26 2 views
-1

Я использую filter_input, и теперь я хочу, чтобы вернуть истинна на каждый номер (0-9) и ложно на неиска чисел (аз, AZ и т.д ..)filter_input с 0 возвращает ложное

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

<?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. Если я использую a-Z как переменную GET (так как test.php?i=a), она показывает bad. Все идет нормально.

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

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

+0

'если (is_int ($ я)) {' –

+0

Это возвращает плохо, а для 0. –

ответ

2

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

Кроме того, вы используете фильтр sanitisation, который в принципе никогда не сработает. Вы хотите использовать 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'; 
} 
+0

Это не работает, когда я использую 0 или аз или я ухожу он пуст, он все равно возвращается хорошо. –

+0

@ Joshua Смотрите дополнение. – deceze

Смежные вопросы