2012-11-21 10 views
6

posso usare intval, ma in base alla documentazione:Come analizzare correttamente un intero in PHP?

Strings sarà più probabile ritorno 0 anche se questo dipende dalle più a sinistra caratteri della stringa. Si applicano le regole comuni del casting intero .

... e il valore di analizzare può essere 0, cioè non sarà in grado di distinguere tra zero e un string.

$value1 = '0'; 
$value2 = '15'; 
$value3 = 'foo'; // Should throw an exeption 

domanda reale è: come posso analizzare la stringa e distinguere tra un string che gettano a 0 e un sé pari a zero?

+0

Come conservatore avete bisogno di essere? intval funziona bene, ma se ti aspetti che la stringa contenga valori non numerici e hai bisogno di PRESERVARE i valori numerici, ti consigliamo di eseguirlo prima con preg_replace. –

+0

@cale_b stringa deve essere tutto il numerico da trasmettere. – gremo

risposta

8

Nel seguente codice, $int_value verrà impostato null se $value non era una stringa numerica effettivo (base 10 e positivo), altrimenti verrà impostato al valore intero di $value:

$int_value = ctype_digit($value) ? intval($value) : null; 
if ($int_value === null) 
{ 
    // $value wasn't all numeric 
} 
+0

Andando a provarlo, grazie. – gremo

+1

Non funziona su numeri interi negativi ("-" non è una cifra) – data

0

Non ho benchmark contro il ctype_digit(), ma penso che la seguente sia una buona opzione. Ovviamente dipende dal comportamento esatto che ti aspetti.

function parseIntOrException($val) { 
    $int = (int)$val; 
    if ((string)$int === (string)$val) { 
    throw \Exception('Nope.'); 
    } 
    return $int; 
} 

http://3v4l.org/Tf8nh

1  1 
'2'  2 
'3.0' false 
4.0  4 
5  5 
Problemi correlati