Php preg_match()以匹配给定条件之一
昨天我在这里得到了一些帮助,让正则表达式正确地接受输入,例如Php preg_match()以匹配给定条件之一,php,regex,preg-match,Php,Regex,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('/
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, 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))
或者,您可以使用regex alternation组合这两个选项:
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))
当然,可以将其缩短,但在上面的代码示例中,我试图展示这个概念,而不是使代码尽可能简洁或者您可以使用一个正则表达式来完成所有工作:
$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);
描述整个任务。您希望什么输入是有效的?
$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);