2013-04-02 54 views
1

我试图验证使用正则表达式英国的邮政编码的格式在这里找到:UK Postcode Regex (Comprehensive)PHP的preg_match未知的修饰

我测试的PHP代码如下,以$代码邮政编码测试

$regex = '(GIR 0AA)|((([A-Z-[QVX]][0-9][0-9]?)|(([A-Z-[QVX]][A-Z-[IJZ]][0-9][0-9]?)|(([A-Z-[QVX‌​]][0-9][A-HJKSTUW])|([A-Z-[QVX]][A-Z-[IJZ]][0-9][ABEHMNPRVWXY]))))\s?[0-9][A-Z-[C‌​IKMOV]]{2})'; 
echo preg_match($regex,strtoupper($code)); 

我得到这个错误:Message: preg_match() [function.preg-match]: Unknown modifier '|'

我不认为正则表达式本身就是问题 - 它被验证为答案,并有相当多的流量,所以我相信它一定适用于其他人。

你能看到我做错了什么吗?我不是正则表达式专家,所以我很挣扎。在Regex to validate UK Post Codes的问题是非常相似,但通过实施解决方案(在开始时加^和在结尾$),我得到一个新的错误“无结束分隔符^”发现“...

+0

没错这是基本相同的问题 - 我没有看到它在搜索时,由于第一其它类似的问题并没有解决我的情况。 – Anak

回答

3

我相信你的正则表达式模式需要被封闭在/.../,所以:

$regex = '/(GIR 0AA)|((([A-Z-[QVX]][0-9][0-9]?)|(([A-Z-[QVX]][A-Z-[IJZ]][0-9][0-9]?)|(([A-Z-[QVX‌​]][0-9][A-HJKSTUW])|([A-Z-[QVX]][A-Z-[IJZ]][0-9][ABEHMNPRVWXY]))))\s?[0-9][A-Z-[C‌​IKMOV]]{2})/'; 
+0

是的,这是它 - 我认为我看到的其他答案不在PHP中,因此他们有不同的外壳。 – Anak

2

PHP要求各地正则表达式delimiters,在Perl的风格。分隔符后有任何modifiers。选择一个你在正则表达式中没有使用的字符。最常见的选择是/

$regex = '/(GIR 0AA)|((([A-Z-[QVX]][0-9][0-9]?)|(([A-Z-[QVX]][A-Z-[IJZ]][0-9][0-9]?)|(([A-Z-[QVX‌​]][0-9][A-HJKSTUW])|([A-Z-[QVX]][A-Z-[IJZ]][0-9][ABEHMNPRVWXY]))))\s?[0-9][A-Z-[C‌​IKMOV]]{2})/'; 

这解释了您所看到的错误消息。它认为正则表达式是(GIR 0AA),括号为分隔符,然后尝试解析|作为修饰符。

1

您需要在您的preg_表达式中使用分隔符。

例如:

$regex = '#(GIR 0AA)|((([A-Z-[QVX]][0-9][0-9]?)|(([A-Z-[QVX]][A-Z-[IJZ]][0-9][0-9]?)|(([A-Z-[QVX‌​]][0-9][A-HJKSTUW])|([A-Z-[QVX]][A-Z-[IJZ]][0-9][ABEHMNPRVWXY]))))\s?[0-9][A-Z-[C‌​IKMOV]]{2})#'; 
     ^here                                         and here^
1

尝试把酒吧的beggining和表达 像结尾:/expression/

$regex = "/(GIR 0AA)|((([A-Z-[QVX]][0-9][0-9]?)|(([A-Z-[QVX]][A-Z-[IJZ]][0-9][0-9]?)|(([A-Z-[QVX‌​]][0-9][A-HJKSTUW])|([A-Z-[QVX]][A-Z-[IJZ]][0-9][ABEHMNPRVWXY]))))\s?[0-9][A-Z-[C‌​IKMOV]]{2})/" 
如果u想表达是非区分大小写

,放一个i(来自'不敏感')在结束栏之后。 /expression/i

$regex = "/(GIR 0AA)|((([A-Z-[QVX]][0-9][0-9]?)|(([A-Z-[QVX]][A-Z-[IJZ]][0-9][0-9]?)|(([A-Z-[QVX‌​]][0-9][A-HJKSTUW])|([A-Z-[QVX]][A-Z-[IJZ]][0-9][ABEHMNPRVWXY]))))\s?[0-9][A-Z-[C‌​IKMOV]]{2})/i" 
相关问题