2013-12-11 33 views
0

我想使用正則表達式來驗證和郵寄地址具有以下格式國家ISO字母代碼和ZIP提取值:如何匹配郵政地址與iso字母代碼和zip?

DE-12345

到目前爲止,我想出了:[a-zA-Z]{2}-\d+

我可以改進嗎?

進一步的問題:我可以用什麼正則表達式只提取

  • 兩個字母

  • 數字僅 ?

+0

考慮到一些國家也在郵政編碼中使用字母。 (例如,阿伯丁是AB10) –

+0

呃...許多國家沒有5位郵政編碼。 –

+0

在我的(印度)沒有字母的6位數字 –

回答

3

忽略了一個事實每個國家都有完全不同的格式。

以獲得在java中匹配的部分,用括號括起來並選擇組。

Pattern p = Pattern.compile("([a-zA-Z]{2})-(\d+)"); 
Matcher m = p.matcher("DE-123"); 
if (m.matches()) { 
    String letters = m.group(1); 
    String numbers = m.group(2); 
} 
+0

我能做些什麼來使字母組可選? 'DE-' – membersound

+0

好的回答我自己的問題:'([a-zA-Z] {2} - )?(\ d +)' – membersound

+0

yeh,那也會使 - – M21B8

0

改進取決於郵政地址所圍繞的內容......例如,如果它們被整個文本頁面包圍,那麼使用正則表達式會有所不同。

目前,你的正則表達式工作得很好。

我能想到的唯一的事情就是你可以獲取所有有效的國家代碼列表,並做一個大的替換,以便只有有效的國家代碼可以匹配。

爲了提取字母和數字,你會包起來的捕捉組:

([a-zA-Z]{2})-(\d+)

第一個括號爲1組,第二個括號是2組

0

嚴格來說,郵政編碼是在美國境內使用的郵政編碼/郵政編碼系統。

驗證國際郵政編碼/郵政編碼會很棘手。不同的國家使用具有不同允許字符,不同字符數和不同「標點符號」的非常不同的系統。即使美國的郵政系統使用兩種形式的郵政編碼,即5位數字和5 + 4位數字。

postal codes的維基百科頁面列出了一些國家的格式,但您可能需要進一步研究。

相關問題