`m pregunto por qué esto no funcionaphp validar número entero
echo gettype($_GET['id']); //returns string
if(is_int($_GET['id']))
{
echo 'Integer';
}
Cómo validar los datos que pasan de GET/POST si es entero?
`m pregunto por qué esto no funcionaphp validar número entero
echo gettype($_GET['id']); //returns string
if(is_int($_GET['id']))
{
echo 'Integer';
}
Cómo validar los datos que pasan de GET/POST si es entero?
El manual dice:
Para probar si una variable es un número o una cadena numérica (como el formulario de entrada, que siempre es una cadena), debe uso is_numeric().
alternativa se puede utilizar la prueba basada en expresiones regulares como:
if(preg_match('/^\d+$/',$_GET['id'])) {
// valid input.
} else {
// invalid input.
}
Parece que se está comprobando si una cadena contiene un número entero, en lugar de si esa variable es un entero. Si es así, debería verificar la funcionalidad de expresiones regulares de php. Le permite verificar patrones muy específicos en una cadena para validarla para cualquier criterio. (Por ejemplo, si contiene sólo caracteres numéricos)
Aquí está la página php http://php.net/manual/en/function.preg-match.php
y aquí es ver un resumen de las expresiones regulares (para hacer la cadena $ patrón) http://regexpr.com/cheatsheet/
Probar:
if(isNumeric($_GET['id'])) {
$cast_int = (int)$_GET['id'];
}
if(isset($cast_int)) {
echo gettype($cast_int)."<br />\n";
if(is_int($cast_int))
{
echo 'Integer'."<br />\n";
}
} else {
echo gettype($_GET['id'])." was passed<br />\n";
}
function isNumeric($numeric) {
return preg_match("/^[0-9]+$/", $numeric);
}
tomo un enfoque un poco más paranoico para la desinfección de entrada GET
function sanitize_int($integer, $min='', $max='')
{
$int = intval($integer);
if((($min != '') && ($int < $min)) || (($max != '') && ($int > $max)))
return FALSE;
return $int;
}
Para ser aún más seguro, se puede extraer sólo los números primero y luego ejecutar la función anterior
function sanitize_paranoid_string($string, $min='', $max='')
{
$string = preg_replace("/[^a-zA-Z0-9]/", "", $string);
$len = strlen($string);
if((($min != '') && ($len < $min)) || (($max != '') && ($len > $max)))
return FALSE;
return $string;
}
Código de: http://libox.net
¿Qué hay de intval
?
$int = intval($_GET['id']);
Puede utilizar
$validatedValue = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
Ver http://php.net/filter_input y funciones relacionadas.
Me encanta el filter_var y filter_input :) –
para validar los datos de formulario (cuerda) como un entero, se debe utilizar ctype_digit()
Devuelve TRUE
si cada carácter en el texto de la cadena es un dígito decimal, FALSE
lo contrario. (PHP 4> = 4.0.4, PHP 5)
Referencia: http://php.net/manual/en/function.ctype-digit.php
'ctype_digit()' solo verificará una cadena, por lo que 'ctype_digit (1) === false', mientras' ctype_digit ('1') === true'. Esto es muy útil para validar la entrada del usuario, ya que $ _GET y $ _POST contienen cadenas. – kfriend
Pero is_numeric() también acepta la notación exótico. –
... y también acepta números decimales. 'preg_match' FTW. También puede aceptar entradas como '04'. – Ben
¿No debería el preg_match aceptar números negativos también? Por lo que yo sé, un entero puede ser negativo, por lo que -5 debe aceptarse como Int. –