Equivalente PHP della funzione parseInt di JavaScript?[duplicare]
Domanda
Possibile duplicato:
Controlla se una variabile è un numero naturale
Mi sono appena imbattuto nel punto in cui devo disinfettare un input e rimuovere tutti i caratteri non numerici con PHP.Pensavo di creare una funzione da solo, ma prima volevo verificare le possibili funzioni integrate, quindi non dovrò dedicare altro tempo a reinventare la ruota.
Soluzione
Puoi utilizzare l'espressione regolare come di seguito
$int = (int) preg_replace('/\D/', '', $strNonNumeric);
O
$int = (int) preg_replace('/[^0-9]/', '', $strNonNumeric);
Altri suggerimenti
Non esiste un equivalente diretto di pareseInt()
in PHP perché PHP non ha un file NaN
tipo di dati. parseInt()
produrrà NaN
se il valore non può essere analizzato.
Inoltre, parseInt()
ha il parametro radix, che nessuna delle opzioni PHP ti fornisce.
Detto questo, se tutto ciò che vuoi fare è trasformare una stringa in un numero intero, allora ci sono diverse opzioni:
$int = (int)$string;
$int = intval($string);
$int = settype($string,'integer');
Quei tre funzioneranno tutti più o meno allo stesso modo.Potrebbero esserci alcuni casi limite in cui intval()
differisce dagli altri due, ma in generale trasformeranno una stringa in un int.In assenza di NaN
, escono tutti 0
(zero) se la stringa non è numerica e non può essere analizzata.Ma questo dovrebbe essere sufficiente per la maggior parte degli scopi igienico-sanitari del DB.
Se vuoi davvero un NaN
in caso di errore, il più vicino che otterrai è null
.Puoi ottenerlo utilizzando filter_var()
:
$value = filter_var(FALSE, FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE);
Se vuoi solo verificare che la stringa sia numerica, il file is_numeric()
la funzione può farlo:
$bool = is_numeric($string);
Tuttavia, restituisce true per i decimali e anche per la notazione scientifica, quindi potrebbe non essere perfetto per la maggior parte delle situazioni.Un'opzione migliore è ctype_digit()
che restituisce vero se la stringa è composta solo da cifre:
$bool = ctype_digit($string);
Se nessuno di questi è adatto, c'è sempre l'opzione regex, utilizzando preg_match()
O preg_replace()
, ma questi sono decisamente eccessivi per questo tipo di scenario.
Puoi usare:
$string = "90"; //string
$myInt = (int) $string; //parse to int
Consiglierei di utilizzare il filtro FILTER_VALIDATE_INT.
Puoi anche usare sscanf (proprio come fai in C)
<?php
$str = "10";
sscanf($str, "%d", $intVal);
$intVal *= 10;
echo $intVal;
?>
Produzione:
100