2011-04-10 60 views
3

這個正則表達式,用於驗證郵政編碼兩個主要部分組成完美的作品拆分英國郵政編碼爲使用Java

^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) {0,1}[0-9][A-Za-z]{2})$ 

,但我想分裂郵政編碼檢索用java郵政編碼的各個部分。

這怎麼能在java中完成?

+1

參考:http://en.wikipedia.org/wiki/UK_Postcodes#Format ...這將是一個正則表達式的地獄加規則可能會改變。你需要做什麼? – 2011-04-10 10:45:49

+0

我需要它的用戶可以輸入郵編的搜索框。我主要對第一部分感興趣,因此只輸入第一部分或滿足用例的完整有效郵編。 – 2011-04-10 11:04:04

回答

5

下面是官方的正則表達式匹配英國的郵政編碼:

http://interim.cabinetoffice.gov.uk/media/291370/bs7666-v2-0-xsd-PostCodeType.htm

如果要分割找到的郵政編碼爲它的兩個部分,是不是簡單地在空格分割的問題?一個英國郵政編碼的兩部分只是由一個空格分開,對吧?在Java中,這將是:

String[] fields = postcode.split("\\s"); 

其中郵政編碼是經過驗證的郵政編碼和字段[]將長度爲2的數組含有第一部分和第二部分。

編輯:如果這是驗證用戶輸入,並要驗證的第一部分,你的正則表達式是:

Pattern firstPart = Pattern.compile("[A-Z]{1,2}[0-9R][0-9A-Z]?"); 

要驗證第二部分是:

Pattern secondPart = Pattern.compile("[0-9][A-Z-[CIKMOV]]{2}"); 
+0

我認爲他在詢問有關未被空間分隔的情況。在這種情況下做的規則看起來相當複雜。 – 2011-04-10 10:52:33

+0

@Pekka - 沒有空格的郵編將無法驗證。也許我誤解了,但我雖然OP想分割驗證地址? – 2011-04-10 10:53:59

+0

@理查德,OP需要澄清。看看上面的維基百科鏈接,也許他需要*所有*單獨的組件。 – 2011-04-10 10:55:05

-1

您可以使用Google近期開放源代碼庫來實現此目的。 http://code.google.com/p/libphonenumber/

+1

該庫似乎只能做電話號碼。與該頁面上的英國郵政編碼無關 – 2013-04-17 16:07:10

1

我意識到,這是相當長的時間,因爲這個問題被問過,但我有同樣的要求,並認爲我會發布我的解決方案的情況下,它可以幫助人在那裏:

const string matchString = @"^(?<Primary>([A-Z]{1,2}[0-9]{1,2}[A-Z]?))(?<Secondary>([0-9]{1}[A-Z]{2}))$"; 

var regEx = new Regex(matchString); 
var match = regEx.Match(Postcode); 

var postcodePrimary = match.Groups["Primary"]; 
var postcodeSecondary = match.Groups["Secondary"]; 

這不會驗證郵政編碼,但如果在它們之間沒有空格輸入,它會將其分成兩部分。

+0

您可以在兩組之間插入可選的空白,然後它將匹配或不匹配空格並分成兩部分。我不確定如何在這種正則表達式中做到這一點,但通常像/ s? – 2013-04-18 20:49:37

相關問題