2010-05-05 2 views
6

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

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

Спасибо!

+4

no repro, 'is_numeric (0)' возвращает 'bool (true)' для меня. то же самое с 'is_int' – SilentGhost

+0

@ Промышленное: Вы уверены? Http: //www.ideone.com/h5CSa – kennytm

+2

Вы уверены, что это не буква O вместо нуля? –

ответ

0

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

5

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

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

Результат:

bool(true) 
bool(true) 
+0

Очень странно. Не знаю, почему моя тестовая среда (windows) возвращает false. – Industrial

0
var_dump(is_int("0")); 

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

Несмотря на то, что мой php может быть немного выключен, он был без перерыва на прошлой неделе или два.

+1

Привет! Строка не передается как строка. – Industrial

+2

@ Промышленный это парадокс;) – Gordon

+1

@ Gordon Duuh. Это определенно для стены славы. Переданное значение не является строкой, а только числом. Я надеюсь, что это стало понятным;) – Industrial

1

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

+0

Спасибо! На удивление, именно это я и делал! :) –

0

Когда вы имеете дело с 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.

0

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

Длинная история Короче говоря, что когда-либо номер:

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

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

0
if($price != 0) { 
    if(is_numeric($price)) { 
     $price = $price; // numeric 
    } else { // is not numeric } 
} else { 
    $price = $price; // 0 as numeric 
} 
+0

Отформатируйте свой ответ правильно, и вам действительно не нужно отвечать на 7-летний вопрос, который, случается, имеет принятый ответ. – Sand

+0

Этот ответ не только не имеет смысла, есть синтаксическая ошибка для загрузки. – Antti29