2012-03-05 12 views
5

In PHP, sembra che ogni oggetto possa essere convertito in un numero intero, chiamando semplicemente intval($object), ma questo non è quello che voglio. Quello che voglio è, per verificare se l'oggetto sarebbe valido per essere convertito in un numero intero per ciò che un umano pensa che sia.PHP controlla se l'oggetto può essere convertito in intero?

cioè oggetti validi sarebbero

  • 12
  • 12.0
  • "12"
  • "12.0"

E non valida sarebbe

  • MyFooInstance()
  • "some string"
  • "12.0.0"
  • "0 12.0"

ecc in python, ho potuto semplicemente il seguente:

try: 
    int(var) 
except (TypeError, ValueError): 
    return False 
return True 

Come posso raggiungere questo obiettivo in PHP?

+1

[Il comportamento della conversione di ** oggetti ** in numero intero non è definito.] (Http://php.net/manual/en/language.types.integer.php#language.types.integer.casting) – Gordon

+0

Vai con Dogbert e riferisci Gordon –

risposta

8

Utilizzare is_numeric.

<?php 
$tests = array(
    "42", 
    1337, 
    "1e4", 
    "not numeric", 
    array(), 
    9.1 
); 

foreach ($tests as $element) { 
    if (is_numeric($element)) { 
     echo "'{$element}' is numeric", PHP_EOL; 
    } else { 
     echo "'{$element}' is NOT numeric", PHP_EOL; 
    } 
} 
?> 


'42' is numeric 
'1337' is numeric 
'1e4' is numeric 
'not numeric' is NOT numeric 
'Array' is NOT numeric 
'9.1' is numeric 

(Dalla pagina)

+0

Grazie, deve averlo perso! –

-1

provare questo

if((int)$variable) {... 
+1

La condizione in 'if ((int) $ variabile)' valuterà in 'false' quando' $ variabile == 0'. –

+0

sì, ho dimenticato quel "piccolo" dettaglio :) –

3

Integer (non solo numerico) di prova:

function is_integerable($v){ 
    return is_numeric($v) && +$v === (int)(+$v); 
} 

Risultati:

$str => is_integerable($str) 
'-1' => true 
'-1.00' => true 
'-1.11' => false 
'1e4' => true 
'1e40' => false 

Vedi:

http://codepad.org/LoqfAgNl

+0

Grazie mille, ma anche 'is_numeric' si adatta bene. :) –

1

See PHP di ctype_digit().

Questa funzione valuta una stringa per vedere se tutti i caratteri sono numerici. Pertanto, "1.1" non restituirà true perché "." non è numerico, ma lo sarà "11". Si noti inoltre che questo funziona solo per le stringhe, quindi anche i numeri senza le virgolette circostanti non funzioneranno.

Problemi correlati