在我的应用程序中,在我发送一个字符串之前,我需要确定在文本框中输入的文本是否是英国邮政编码。我没有正则表达式的能力来为自己解决这个问题,在四处搜索之后我似乎无法解决这个问题!只是想知道过去是否有人做过类似的事情?
或者,如果有人能指出我正确的方向,我将不胜感激!
汤姆
在我的应用程序中,在我发送一个字符串之前,我需要确定在文本框中输入的文本是否是英国邮政编码。我没有正则表达式的能力来为自己解决这个问题,在四处搜索之后我似乎无法解决这个问题!只是想知道过去是否有人做过类似的事情?
或者,如果有人能指出我正确的方向,我将不胜感激!
汤姆
维基百科对此有很好的部分。基本上,答案取决于您要处理哪种病理病例。例如:
BS7666 Schema 的另一种短正则表达式是:
[A-Z]{1,2}[0-9R][0-9A-Z]? [0-9][ABD-HJLNP-UW-Z]{2}
上述表达式未能排除许多不存在的区号(例如 A、AA、Z 和 ZY)。
基本上,彻底阅读维基百科的那个部分并决定你需要什么。
对于没有空格的邮政编码(例如 SE19QZ),我使用:(它还没有让我失望 ;-))
^([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-9][A-Za-z]{2})
如果有空格(例如 SE1 9QZ),则:
^([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})$
您可以使用此正则表达式匹配大多数邮政编码:
/[A-Z]{1,2}[0-9]{1,2}\s?[0-9]{1,2}[A-Z]{1,2}/i
这意味着...A-Z
一或两次 ( {1,2}
) 后跟0-9
1 或 2 次,然后是空格,\s
可选地?
后跟0-9
1 或 2 次,然后是A-Z
1 或 2 次。
这将匹配一些误报,因为我可以编造类似ZZ00 00ZZ
的邮政编码,但要准确匹配所有邮政编码,唯一的方法是从邮局购买邮政编码数据——这是相当昂贵的。您也可以下载免费的邮政编码数据库,但它们没有 100% 的覆盖率。
希望这可以帮助。
维基百科有一些英国邮政编码的正则表达式:http ://en.wikipedia.org/wiki/Postcodes_in_the_United_Kingdom#Validation