2015-08-13 9 views
7

Voglio 0-9 qualsiasi numero in campi di input, così ho controllare filter_var come di seguitotipo Regexp per numero 0

<?php 
$res['pno'] = filter_var($cond['pno'],FILTER_VALIDATE_REGEXP, 
//check valid phone no 
array('options'=>array('regexp'=>'/^0+[0-9]*$/')))?true:false;     
?> 

E 'ok quando il tipo di un numero qualsiasi, ma il tipo 0 solo, è tornare falso quindi come controllare per restituire true se si digita 0 solo?

+0

Qual è la condizione per il numero di telefono valido? – Tushar

+2

Prova solo '/^[0-9] * $ /'. O deve iniziare con un '0'? –

+0

nel caso "0", è seguito dalla fine della linea? perché se no, si ottiene false – Zohar81

risposta

9

L'espressione regolare era già valida.

vostro problema reale è questo:

?true:false 

Quando filter_var con la regex riesce, si restituirà una stringa di appena "0".

  • Ora, se ?: valuta il che, nel contesto booleano , allora la vostra espressione finale sarà semplicemente false.

  • Quindi eseguire il check-in filter_var() con strlen() o is_string.

    = is_string(filter_var(…, …, …)) ? true : false; 
    

    (Sì, la ?true:false è altamente ridondante allora.)

4

magari provare:

if ($res['pno']!==false){ 
    // !== operator is important 
    // because it checks value AND type of constant 
    // string '0' is equal false if You checks only value 
} 
1

Prova questa: condizione di controllo con !==false come seguire :

$cond['pno']="0"; 
$res['pno'] = filter_var($cond['pno'],FILTER_VALIDATE_REGEXP, 
array('options'=>array('regexp'=>'/^0+[0-9]*$/')))!==false?true:false;     
var_dump($res['pno']); 
$cond['pno']="01"; 
$res['pno'] = filter_var($cond['pno'],FILTER_VALIDATE_REGEXP, 
array('options'=>array('regexp'=>'/^0+[0-9]*$/')))!==false?true:false;     
var_dump($res['pno']); 
$cond['pno']="a"; 
$res['pno'] = filter_var($cond['pno'],FILTER_VALIDATE_REGEXP, 
array('options'=>array('regexp'=>'/^0+[0-9]*$/')))!==false?true:false;     
var_dump($res['pno']); 

uscita

boolean true 

boolean true 

boolean false 
1

Perché il PHP è un linguaggio debolmente tipizzato (il confronto non sono fatto sul tipo di, ma solo sul valore di una variabile di default), condizione che restituisce stringa "0" viene valutato come empty e pertanto viene eseguita un'altra istruzione. Per verificare se il valore è vuoto e non utilizzare un numero empty($num) && !is_numeric($num), ad esempio:

$res['pno'] = filter_var($cond['pno'], FILTER_VALIDATE_REGEXP, array('options' => array('regexp'=>'/^0+[0-9]*$/'))); 
$res['pno'] = !(empty($res['pno']) && !is_numeric($res['pno']));