2010-05-05 16 views
6

Is_numeric() e is_int() restituisce false se il valore è 0. Cosa posso fare invece per verificare che un valore specifico sia numeri solo in PHP?PHP: Is_numeric restituisce false su 0

Ci stiamo dirigendo direttamente al campo delle espressioni regolari, oppure ci sono già alcune funzionalità interessanti per questo?

Grazie!

+4

no repro, 'is_numeric (0)' restituisce 'bool (true)' per me. lo stesso con 'is_int' – SilentGhost

+0

@Industrial: sei sicuro? http: //www.ideone.com/h5CSa – kennytm

+2

Sei sicuro che non sia una lettera O invece di uno zero? –

risposta

0

PHP riavviato sul server e funziona bene ora. Non ho idea del motivo per cui si è verificato però. Grazie a tutti per il loro aiuto!

5

Si sta tornando vero per me in entrambi i casi:

var_dump(is_numeric(0)); 
var_dump(is_int(0)); 

Risultato:

bool(true) 
bool(true) 
+0

Molto strano. Non ho idea del motivo per cui il mio ambiente test (windows) restituisce false. – Industrial

0
var_dump(is_int("0")); 

passerà falso perché si sta passando è lo zero come una stringa letterale. Potresti provare a passare la stessa cosa di una variabile che ha attraversato (credo) parseInt ("");

Anche se il mio php potrebbe essere un po 'scadente, dopo aver effettuato Javascripting ininterrottamente l'ultima settimana o due.

+1

Ciao! La stringa non viene passata come stringa. – Industrial

+2

@Industrial è un paradosso;) – Gordon

+1

@Gordon Duuh. Quello era sicuramente il muro della fama. Il valore passato non era una stringa, ma solo un numero. Spero che lo abbia reso comprensibile;) – Industrial

1

Zero, come numero intero vuoto. Quindi assicurati che non ci sia alcun controllo per vuoto prima di verificare Is_numeric() o is_int()

+0

Grazie! sorprendentemente questo è esattamente quello che stavo facendo! :) –

0

Quando hai a che fare con REQUEST è meglio controllare prima l'input usando filter_input. Ecco un esempio di 'id' da $ _GET.

filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT) 

l'esempio completo

if (is_int(filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT))) { 
     $id = $_GET['id']; 
} else { 
     die('please input a integer'); 
} 

Beh, la funzione di venire con la versione di PHP> = 5.2.

0

Ho lottato per lo stesso problema, e mi sono reso conto che c'era uno spazio dopo il numero.

lunga storia breve, che cosa mai il numero è:

is_numeric(" 0.0") --> YES 
is_numeric("0.0 ") --> NO 

Ecco un esempio ...

public function getCoordinates() 
{ 
    return sprintf('%1$f , %2$f',$this->getLatitude(),$this->getLongitude()); 
} 

Più avanti nel processo di ...

 $myarr = explode(",",$_ScreenCoordinates); 
     echo "_ScreenCoordinates:$_ScreenCoordinates<br>"; 
     echo "myarr[0]:".$myarr[0]." - ".((is_numeric($myarr[0]))?"YES":"NO")."<br>"; 
     echo "myarr[1]:".$myarr[1]." - ".((is_numeric($myarr[1]))?"YES":"NO")."<br>"; 
     echo "trimmed[0]:".$myarr[0]." - ".((is_numeric(trim($myarr[0])))?"YES":"NO")."<br>"; 

Stampato sullo schermo:

Array ([0] => 1.200000 [1] => 123.456000) 
_ScreenCoordinates:1.200000 , 123.456000 
myarr[0]:*1.200000 * - NO 
myarr[1]:* 123.456000* - YES 
trimmed[0]:*1.200000 * - YES 
0

Questo può verificarsi anche se questo 0 è un valore booleano FALSE. is_numeric() restituisce sempre FALSE per booleano.

0
if($price != 0) { 
    if(is_numeric($price)) { 
     $price = $price; // numeric 
    } else { // is not numeric } 
} else { 
    $price = $price; // 0 as numeric 
} 
+0

Formatta la tua risposta correttamente e davvero non hai bisogno di rispondere a una domanda di 7 anni che capita di avere una risposta accettata. – Sand

+0

Non solo questa risposta non ha senso, c'è un errore di sintassi per l'avvio. – Antti29