2015-08-13 15 views
7

chcę 0 do 9 dowolną liczbę pól wejściowych, więc sprawdzam filter_var jak poniżejtyp Regexp o numerze 0

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

Jest ok, gdy typ dowolny numer, ale typ 0 tylko, że powrót fałszywe, więc jak to sprawdzić, aby zwrócić true, jeśli tylko wpisz 0?

+0

Jaki jest warunek prawidłowego numeru telefonu? – Tushar

+2

Spróbuj tylko '/^[0-9] * $ /'. Czy musi zacząć od "0"? –

+0

w przypadku "0", czy po nim następuje koniec linii? ponieważ jeśli nie, otrzymasz fałszywe – Zohar81

Odpowiedz

9

Samo wyrażenie regularne było już w porządku.

Rzeczywisty problem jest taki:

?true:false 

Kiedy filter_var z regex powiedzie, to zwróci String prostu "0".

  • Teraz jeśli ?: ocenia, że ​​w kontekście logicznym, wówczas ostateczna ekspresja będzie po prostu false.

  • Zawijamy więc wynik testu filter_var() z strlen() lub is_string.

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

    (Tak, ?true:false jest wysoce zbędny potem.)

4

Może spróbuj:

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

Spróbuj: warunek wyboru z !==false jak po :

$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']); 

Wyjście

boolean true 

boolean true 

boolean false 
1

Ponieważ PHP jest luźno wpisane język (porównanie nie jest zrobione od rodzaju, ale tylko od wartości zmiennej domyślnie), stan, który zwraca ciąg "0" jest oceniany jako empty i dlatego wykonywana jest instrukcja else. Aby sprawdzić, czy wartość jest pusta i nie ma numeru, użyj empty($num) && !is_numeric($num), na przykład:

$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'])); 
Powiązane problemy