Sé libre de compartir nuestra web y códigos en tus redes, apóyanos para ampliar esta comunidad.
Solución:
¿Qué tal usar ctype_digit
?
Del manual:
El ejemplo anterior dará como resultado:
The string 1820.20 does not consist of all digits. The string 10002 consists of all digits. The string wsl!12 does not consist of all digits.
Esto solo funcionará si su entrada es siempre una string:
$numeric_string = '42';
$integer = 42;
ctype_digit($numeric_string); // true
ctype_digit($integer); // false
Si su entrada puede ser de tipo int
, luego combina ctype_digit
con is_int
.
Si le preocupan los números negativos, deberá verificar la entrada para un -
, y si es así, llama ctype_digit
en un substr
de la entrada string. Algo como esto lo haría:
function my_is_int($input)
if ($input[0] == '-')
return ctype_digit(substr($input, 1));
return ctype_digit($input);
filter_var
Deberías hacerlo:
var_dump(filter_var('2', FILTER_VALIDATE_INT)); // 2
var_dump(filter_var('2.0', FILTER_VALIDATE_INT)); // false
var_dump(filter_var('2.1', FILTER_VALIDATE_INT)); // false
pero
var_dump(filter_var(2, FILTER_VALIDATE_INT)); // 2
var_dump(filter_var(2.0, FILTER_VALIDATE_INT)); // 2
var_dump(filter_var(2.1, FILTER_VALIDATE_INT)); // false
Si solo quiere booleanos como valores de retorno, envuélvalo en una función, por ejemplo
function validatesAsInt($number)
$number = filter_var($number, FILTER_VALIDATE_INT);
return ($number !== FALSE);
+1 a la respuesta de Dominic (usando ctype_digit
). Otra forma de hacerlo es con tipo coerción:
$inty = "2";
$inty2 = " 2";
$floaty = "2.1";
$floaty2 = "2.0";
is_int($inty + 0); // true
is_int($floaty + 0); // false
is_int($floaty2 + 0); // false
// here's difference between this and the ctype functions.
is_int($inty2 + 0); // true
ctype_digit($inty2); // false
Comentarios y valoraciones del tutorial
Finalizando este artículo puedes encontrar las notas de otros desarrolladores, tú además eres capaz mostrar el tuyo si te gusta.