2010-11-11 43 views
1

昨天匹配任何給定條件的我得到了一些幫助,在這裏得到了正則表達式正確接受輸入,例如,的preg_match()來

Plymouth, United Kingdom 

,但我意識到,我應該接受下面這樣輸入好了,

Plymouth, Devon, United Kingdom 

,所以我說下面的代碼的另一種表現,現在不能接受任何條件的上面!我做錯了什麼?

if(!preg_match('/^[a-zA-Z\s]{4,}[\,]{1}[a-zA-Z\s]{4,}$/', $mem_town_city_country) || !preg_match('/^[a-zA-Z\s]{4,}[\,]{1}[a-zA-Z\s]{2,}[\,]{1}[a-zA-Z\s]{4,}$/', $mem_town_city_country)) 
{ 
    $error = true; 
    echo '<error elementid="mem_town_city_country" message="TOWN/CITY, COUNTRY - sorry, they appear to be incorrect."/>'; 
} 

我怎樣才能使它接受輸入的任何

Plymouth, United Kingdom 

Plymouth, Devon, United Kingdom 

+0

描述整個任務。你期望什麼輸入是有效的? – zerkms 2010-11-11 01:16:05

回答

1

||更改爲&&。如果第一個正則表達式或第二個正則表達式不匹配,當前代碼將顯示錯誤消息。僅當兩個正則表達式不匹配時,才希望顯示錯誤消息。

if(!preg_match('/^[a-zA-Z\s]{4,}[\,]{1}[a-zA-Z\s]{4,}$/', $mem_town_city_country) && !preg_match('/^[a-zA-Z\s]{4,}[\,]{1}[a-zA-Z\s]{2,}[\,]{1}[a-zA-Z\s]{4,}$/', $mem_town_city_country)) 

或者,您可以使用正則表達式交替合併的兩條:

if(!preg_match('/(^[a-zA-Z\s]{4,}[\,]{1}[a-zA-Z\s]{4,}$|^[a-zA-Z\s]{4,}[\,]{1}[a-zA-Z\s]{2,}[\,]{1}[a-zA-Z\s]{4,}$)/', $mem_town_city_country)) 

當然,它可以縮短這一點,但上面的代碼示例中,我試圖表明的概念,而不是使代碼儘可能簡潔

+0

明白了!非常感謝! :-) – laukok 2010-11-11 01:37:56

1

或者你可以使用一個正則表達式,是做好各項工作:

$input = 'Plymouth, Devon, United Kingdom'; 
$matched = preg_match('~^[a-z\s]{4,}(?:,[a-z\s]{4,}){1,2}$~i', $input, $matches); 
var_dump($matched, $matches); 
+0

這個表情很美!非常感謝你! – laukok 2010-11-11 01:37:30