2010-05-05 25 views
6

Is_numeric() así como is_int() devuelve falso si el valor es 0. ¿Qué puedo hacer para verificar que un valor específico solo tenga números en PHP?PHP: Is_numeric devuelve falso en 0

¿Nos dirigimos directamente al campamento de Expresiones regulares, o hay alguna característica agradable y útil para esto ya?

Gracias!

+4

no repro, 'is_numeric (0)' devuelve 'bool (true)' para mí. lo mismo con 'is_int' – SilentGhost

+0

@Industrial: ¿Estás seguro? http: //www.ideone.com/h5CSa – kennytm

+2

¿Seguro que no es la letra O en lugar de cero? –

Respuesta

0

Reinició PHP en el servidor y funciona bien ahora. Sin embargo, no tengo idea de por qué ocurrió. ¡Gracias a todos por su ayuda!

5

Se está volviendo realidad para mí en ambos casos:

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

Resultado:

bool(true) 
bool(true) 
+0

Muy extraño. No tengo idea de por qué mi entorno de prueba (Windows) devuelve falso. – Industrial

0
var_dump(is_int("0")); 

pasará falsa porque está de paso que el cero como una cadena literal. Podría intentar pasar lo mismo que una variable que ha pasado (creo) parseInt ("");

Aunque mi php puede estar un poco apagado, después de haber sido Javascripting sin parar la última semana o dos.

+1

¡Hola! La cadena no se está pasando como una cadena. – Industrial

+2

@ Industrial que es una paradoja;) – Gordon

+1

@Gordon Duuh. Ese fue uno para el muro de la fama definitivamente. El valor que se pasa no es una cadena, sino solo un número. Espero que lo haya hecho comprensible;) – Industrial

1

Zero, como un número entero está vacío. Asegúrate de que no haya ningún cheque vacío antes de marcar Is_numeric() o is_int()

+0

¡Gracias! sorprendentemente eso es exactamente lo que estaba haciendo! :) –

0

Cuando se trata de SOLICITAR es mejor verificar primero la entrada usando filter_input. Aquí hay un ejemplo de 'id' de $ _GET.

filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT) 

el ejemplo completo

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

Bueno, la función de subir con la versión de PHP> = 5.2.

0

Luché contra el mismo problema, y ​​sucedió que había un espacio después del número.

cuento largo, lo que cada vez el número es:

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

Aquí es un ejemplo ...

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

Más adelante en el proceso ...

 $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>"; 

Impreso en la pantalla:

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

Esto también puede suceder si este 0 es un booleano FALSE de hecho. is_numeric() siempre devuelve FALSE para booleano.

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

Formatea tu respuesta correctamente y realmente no necesitas responder a una pregunta de 7 años que tiene una respuesta aceptada. – Sand

+0

No solo esta respuesta no tiene sentido, hay un error de sintaxis para arrancar. – Antti29

Cuestiones relacionadas