2009-01-13 24 views
5

Leí en un foro en el que no puedes confiar por completo is_numeric(). Se deja pasar "0xFF", por ejemplo, que es un hexadecimal permitido ...is_numeric o un preg_match numérico?

Así que mi pregunta es ¿puede engañarle is_numeric? ¿Necesitaré usar una expresión regular para hacerlo correctamente?

Respuesta

0

Regex obviamente sería su mejor opción, sin embargo, viene con una sobrecarga. Entonces realmente depende de tu situación y de lo que quieras hacer.

12

Esto es lo que is_numeric() considera que es una cadena numérica:

cadenas numéricas consisten en signo opcional, cualquier número de dígitos, parte decimal opcional y una parte exponencial opcional. Por lo tanto + 0123.45e6 es un valor numérico válido. La notación hexadecimal (0xFF) también está permitida, pero solo sin signo, decimal y parte exponencial.

Si solo quiere comprobar si una cadena consta de dígitos decimales 0-9, puede usar ctype_digit().

+0

Es cómico que los desarrolladores de VB.NET hayan sido regañados por usar ctypes porque .NET permitió la verificación de tipos de datos, pero en PHP es la forma preferida. – TravisO

0

¿Es para validar la entrada del usuario? Entonces, la sobrecarga de usar una expresión regular o afirmar que no contiene una "x" e is_numeric() no sería demasiado sobrecargada.

0

Si lo que desea es comprobar que algo es un número entero, intente esto:

function isInteger($value){ 
    return (is_numeric($value) ? intval($value) == $value : false); 
} 

Si desea comprobar los flotadores demasiado, entonces esto no va a funcionar, obviamente :)

+1

¿Por qué no simplemente 'return is_numeric ($ value) && intval ($ value) == $ value'? Más fácil de leer – Rob

2

Uno puede también verifique usando ctype_digit() para verificar si es un número verdadero.

Cuestiones relacionadas