昨天我在这里得到了一些帮助,让正则表达式接受输入,例如,
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 :(得分: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))
当然,可以缩短它,但在上面的代码示例中,我试图展示概念而不是使代码尽可能简洁
答案 1 :(得分: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);