2013-04-02 87 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" 
相關問題