number - parseint php
PHP equivalente de la funciĆ³n parseInt de JavaScript? (5)
Posible duplicado:
Compruebe si una variable es un número natural
Acabo de encontrar lo que necesito para desinfectar una entrada y eliminar todos los caracteres sin dígitos con PHP. Pensé en hacer una función yo mismo, pero solo quería comprobar las posibles funciones integradas, para no tener que dedicar más tiempo a reinventar la rueda.
No hay un equivalente directo a pareseInt()
en PHP porque PHP no tiene un tipo de datos NaN
. parseInt()
producirá NaN
si el valor no puede analizarse.
Además, parseInt()
tiene el parámetro radix, que ninguna de las opciones de PHP le da.
Pero dicho esto, si todo lo que quieres hacer es convertir una cadena en un entero, entonces hay varias opciones:
$int = (int)$string;
$int = intval($string);
$int = settype($string,''integer'');
Esos tres funcionarán de la misma manera. Puede haber algunos casos de borde donde intval()
difiere de los otros dos, pero en general, convertirán una cadena en un int. En ausencia de NaN
, todos ellos emiten 0
(cero) si la cadena no es numérica y no se puede analizar. Pero esto debería ser suficiente para la mayoría de los propósitos de saneamiento de DB.
Si realmente desea un NaN
en caso de error, lo más cercano que obtendrá será null
. Puedes obtener esto usando filter_var()
:
$value = filter_var(FALSE, FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE);
Si solo quiere verificar que la cadena sea numérica, la función is_numeric()
puede hacer eso:
$bool = is_numeric($string);
Sin embargo, se vuelve cierto para los decimales y también para la notación científica, por lo que puede no ser perfecto para la mayoría de las situaciones. Una mejor opción es ctype_digit()
que devuelve true si la cadena está formada solo por dígitos:
$bool = ctype_digit($string);
Si no se cumple con esta opción, siempre existe la opción de expresión regular, utilizando preg_match()
o preg_replace()
, pero estas son definitivamente una exageración para este tipo de escenario.
Puedes usar la expresión regular de la siguiente manera
$int = (int) preg_replace(''//D/'', '''', $strNonNumeric);
O
$int = (int) preg_replace(''/[^0-9]/'', '''', $strNonNumeric);
Puedes usar:
$string = "90"; //string
$myInt = (int) $string; //parse to int
Recomendaría el uso de FILTER_VALIDATE_INT Filter.
También puedes usar sscanf (como lo haces en C)
<?php
$str = "10";
sscanf($str, "%d", $intVal);
$intVal *= 10;
echo $intVal;
?>
Salida:
100