PHP: Is_numeric возвращает false на 0

Is_numeric() так же как is_int() возвращает значение false, если значение равно 0. Что я могу сделать вместо этого, чтобы убедиться, что конкретное значение является числами только в PHP?

Мы направляемся прямо в лагерь регулярных выражений, или уже есть какая-то приятная, удобная функция для этого?

Спасибо!

7 ответов

Решение

Перезапустил PHP на сервере, и теперь он работает хорошо. Хотя понятия не имею, почему это произошло. Спасибо всем за помощь!

Это возвращается для меня в обоих случаях:

var_dump(is_numeric(0));
var_dump(is_int(0));

Результат:

bool(true)
bool(true)

Ноль, так как целое число пусто. Поэтому убедитесь, что нет проверки на пустоту, прежде чем проверять Is_numeric() или is_int()

var_dump(is_int("0"));

Передаст false, потому что вы передаете ему ноль как строковый литерал. Вы можете попробовать передать то же самое, что и переменная, которая прошла через (я полагаю) parseInt("");

Хотя мой php, возможно, немного не в себе, он был безостановочным Javascripting последние неделю или две.

Когда вы имеете дело с REQUEST, лучше сначала проверить ввод, используя filter_input. Вот пример проверки 'id' из $_GET.

filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT)

полный пример

if (is_int(filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT))) {
        $id = $_GET['id'];
} else {
        die('please input a integer');
}

Ну, функция придумывает версию PHP >= 5.2.

Я боролся с той же проблемой, и оказалось, что после числа был пробел.

Короче говоря, сколько бы ни было число:

is_numeric(" 0.0") --> YES
is_numeric("0.0 ") --> NO

Вот пример...

public function getCoordinates()
{
    return sprintf('%1$f , %2$f',$this->getLatitude(),$this->getLongitude());
}

Позже в процессе...

        $myarr = explode(",",$_ScreenCoordinates);
        echo "_ScreenCoordinates:$_ScreenCoordinates<br>";
        echo "myarr[0]:".$myarr[0]." - ".((is_numeric($myarr[0]))?"YES":"NO")."<br>";
        echo "myarr[1]:".$myarr[1]." - ".((is_numeric($myarr[1]))?"YES":"NO")."<br>";
        echo "trimmed[0]:".$myarr[0]." - ".((is_numeric(trim($myarr[0])))?"YES":"NO")."<br>";

Напечатано на экране:

Array ( [0] => 1.200000 [1] => 123.456000 )
_ScreenCoordinates:1.200000 , 123.456000
myarr[0]:*1.200000 * - NO
myarr[1]:* 123.456000* - YES
trimmed[0]:*1.200000 * - YES

Это также может произойти, если это 0 является логическим FALSE по факту.is_numeric() всегда возвращается FALSE для логического.

if($price != 0) {
    if(is_numeric($price)) {
        $price = $price; // numeric
    } else { // is not numeric }
} else {
    $price = $price; // 0 as numeric
}
Другие вопросы по тегам