【发布时间】:2012-03-07 20:00:57
【问题描述】:
我有一个 Asp.Net 网站,我想使用 RegularExpressionValidator 来检查英国邮政编码是否为英语(即它不是苏格兰、威尔士或 N.Irish)。
应该可以通过仅使用第一个段(称为邮政编码区)中的字母来查看邮政编码是否为英文。总共有 124 个邮政编码区,this 是它们的列表。
从该列表中,以下邮政编码区域不在英格兰。
- ZE,KW,IV,HS,PH,AB,DD,PA,FK,G,KY,KA,DG,TD,EH,ML(苏格兰)
- LL、SY、LD、HR、NP、CF、SA(威尔士)
- BT(北爱尔兰)
正则表达式的输入可能是整个邮政编码,也可能只是邮政编码区域。
谁能帮我创建一个仅当给定邮政编码为英语时才匹配的正则表达式?
编辑 - 解决方案
在几位海报的帮助下,我能够创建以下正则表达式,我已经成功地针对 1500 多个测试用例进行了测试。
^(AL|B|B[ABDHLNRS]|C[ABHMORTVW]|D[AEHLNTY]|E|E[CNX]|FY|G[LUY]|H[ADGPUX]|I[GMP] |JE|KT|L|L[AENSU]|M|ME|N|N[EGNRW]|O[LX]|P[ELOR]|R[GHM]|S|S[EGKLMNOPRSTW]|T[AFNQ RSW]|UB|W|W[ACDFNRSV]|YO)\d{1,2}\s?(\d[\w]{2})?
【问题讨论】:
-
苏格兰、威尔士和北爱尔兰有多少个代码?因为根据数字,匹配负数可能比正数更容易。
-
@Hersha 是的,我正计划做负面的事情
-
MK,您的正则表达式 en.wikipedia.org/wiki/… 中缺少米尔顿凯恩斯。供其他人参考 “GY”代表根西岛,“JE”代表泽西岛,“IM”代表马恩岛包含在正则表达式中。这可能很好,但如果你只是英国大陆,你将不得不删除这些皇冠依赖项。
标签: regex postal-code