首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >英国邮政编码的正则表达式

英国邮政编码的正则表达式
EN

Stack Overflow用户
提问于 2012-11-18 07:55:15
回答 3查看 827关注 0票数 1

我有一个邮政编码的列表,这些邮政编码应该从我的运输方法中排除。

假设我必须排除Scilly IslesIsle of Man和其他几个。

对于上述两个区域,有效的post代码为IM1-IM9、IM86、IM87、IM89。如果它是IM25或IM85,则它是无效的。

我写了下面的表达式。但是,即使是IM25或IM 85,它也会返回。

代码语言:javascript
复制
var regex = new Regex("(PO3[0-9]|PO4[0-1]|GY[1-9]|JE[1-5]|IM[1-9]|TR[1-9])");

如果我将IM85传递给我的表达式,它应该返回false。对于IM1-IM9,,IM86,IM87,IM89,它应该返回true。

TR post代码也是如此。TR1-TR27是有效的邮政编码。如果我给TR28,它应该返回false。

我正在使用'|‘来分隔多个模式。在一个表达式中包含多个模式的正确方法。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-29 00:43:38

我已经改变了我的方法。

我没有去寻找一个变得越来越复杂的正则表达式,而是保存了英国邮政编码中排除的所有外部代码。

以及如果任何邮政编码包含特定的外发代码,则从列表中排除邮政编码。向外编码的格式如下

代码语言:javascript
复制
XX-YYY
XXX-YYY
XXXX-YYY

在上述所有格式中,X表示英国邮政编码的外发代码。

票数 0
EN

Stack Overflow用户

发布于 2012-11-18 08:10:38

你能指望什么?什么应该匹配,什么不应该匹配?请给出一个你想测试的字符串的例子。

如果您将您的模式与"IM25“进行匹配,它将匹配,因为您允许在您的模式中使用IM[1-9],因此您将获得有效的部分匹配。如果您想要避免这种情况(我不确定您想要实现什么),并且希望在第一个字母后只允许一个数字,请使用“单词边界”\b,并准确地指定您希望允许的内容,如下所示:

代码语言:javascript
复制
(PO3[0-9]|PO4[0-1]|GY[1-9]|JE[1-5]|IM([1-9]|8[6-9])|TR([1-9]|2[0-7]))\b

查看here on Regexr

这将允许"IM“部分也是6-9作为第二个数字,如果前面有8的话。

更新

它仍然不清楚你的任务的上下文是什么。我假设你有一个有效的邮政编码列表,可能会更好,你提取邮政编码,或者只提取邮政编码的第一部分(为此,你最终可以使用正则表达式),并检查它是否在列表中。

票数 1
EN

Stack Overflow用户

发布于 2012-11-18 08:53:39

实际的验证在维基百科的网站上。谷歌有答案;) http://en.wikipedia.org/wiki/Postcodes_in_the_United_Kingdom#Validation

代码语言:javascript
复制
(GIR 0AA)|(((A[BL]|B[ABDFHLNRSTX]?|C[ABFHMORTVW]|D[ADEGHLNTY]|E[HNX]?|F[KY]|G[LUY]?|H[ADGPRSUX]|I[GMPV]|JE|K[ATWY]|L[ADELNSU]?|M[EKL]?|N[EGNPRW]?|O[LX]|P[AEHLOR]|R[GHM]|S[AEGKLMNOPRSTY]?|T[ADFNQRSW]|UB|W[ADFNRSV]|YO|ZE)[1-9]?[0-9]|((E|N|NW|SE|SW|W)1|EC[1-4]|WC[12])[A-HJKMNPR-Y]|(SW|W)([2-9]|[1-9][0-9])|EC[1-9][0-9]) [0-9][ABD-HJLNP-UW-Z]{2})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13436030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档