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.

È stato utile?

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.

sui filtri su php.net

Puoi anche usare sscanf (proprio come fai in C)

<?php

    $str = "10";

    sscanf($str, "%d", $intVal);
    $intVal *= 10;

    echo $intVal;
?>

Produzione:

100

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top