我想使用正則表達式來驗證和郵寄地址具有以下格式國家ISO字母代碼和ZIP提取值:如何匹配郵政地址與iso字母代碼和zip?
DE-12345
到目前爲止,我想出了:[a-zA-Z]{2}-\d+
我可以改進嗎?
進一步的問題:我可以用什麼正則表達式只提取
兩個字母
數字僅 ?
我想使用正則表達式來驗證和郵寄地址具有以下格式國家ISO字母代碼和ZIP提取值:如何匹配郵政地址與iso字母代碼和zip?
DE-12345
到目前爲止,我想出了:[a-zA-Z]{2}-\d+
我可以改進嗎?
進一步的問題:我可以用什麼正則表達式只提取
兩個字母
數字僅 ?
忽略了一個事實每個國家都有完全不同的格式。
以獲得在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);
}
我能做些什麼來使字母組可選? 'DE-' – membersound
好的回答我自己的問題:'([a-zA-Z] {2} - )?(\ d +)' – membersound
yeh,那也會使 - – M21B8
改進取決於郵政地址所圍繞的內容......例如,如果它們被整個文本頁面包圍,那麼使用正則表達式會有所不同。
目前,你的正則表達式工作得很好。
我能想到的唯一的事情就是你可以獲取所有有效的國家代碼列表,並做一個大的替換,以便只有有效的國家代碼可以匹配。
爲了提取字母和數字,你會包起來的捕捉組:
([a-zA-Z]{2})-(\d+)
第一個括號爲1組,第二個括號是2組
嚴格來說,郵政編碼是在美國境內使用的郵政編碼/郵政編碼系統。
驗證國際郵政編碼/郵政編碼會很棘手。不同的國家使用具有不同允許字符,不同字符數和不同「標點符號」的非常不同的系統。即使美國的郵政系統使用兩種形式的郵政編碼,即5位數字和5 + 4位數字。
postal codes的維基百科頁面列出了一些國家的格式,但您可能需要進一步研究。
考慮到一些國家也在郵政編碼中使用字母。 (例如,阿伯丁是AB10) –
呃...許多國家沒有5位郵政編碼。 –
在我的(印度)沒有字母的6位數字 –