2010-11-11 36 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