Pregunta is_numeric o un preg_match numérico?


Leí en un foro en el que no puedes confiar completamente. is_numeric (). Permite pasar por "0xFF", por ejemplo, que es un hexadecimal permitido ...

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


5
2018-01-13 04:33


origen


Respuestas:


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

Las cadenas numéricas constan de signo opcional, cualquier número de dígitos, parte decimal opcional y 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 desea verificar si una cadena consta de dígitos decimales 0-9, podría usar ctype_digit ().


12
2018-01-13 04:42



También se puede comprobar usando ctype_digit() para comprobar si es un número real.


2
2018-01-13 07:10



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


0
2018-01-13 04:40



¿Es para validar la entrada del usuario? Entonces, la sobrecarga de usar una expresión regular o su afirmación no contiene una "x" y is_numeric () no sería una sobrecarga excesiva.


0
2018-01-13 06:21



Si solo quiere comprobar que algo es un entero, intente esto:

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

Si también quieres comprobar si hay flotadores, esto no funcionará, obviamente :)


0
2018-01-13 06:57