我有一个邮政编码的列表,这些邮政编码应该从我的运输方法中排除。
假设我必须排除Scilly Isles、Isle of Man和其他几个。
对于上述两个区域,有效的post代码为IM1-IM9、IM86、IM87、IM89。如果它是IM25或IM85,则它是无效的。
我写了下面的表达式。但是,即使是IM25或IM 85,它也会返回。
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。
我正在使用'|‘来分隔多个模式。在一个表达式中包含多个模式的正确方法。
发布于 2012-11-29 00:43:38
我已经改变了我的方法。
我没有去寻找一个变得越来越复杂的正则表达式,而是保存了英国邮政编码中排除的所有外部代码。
以及如果任何邮政编码包含特定的外发代码,则从列表中排除邮政编码。向外编码的格式如下
XX-YYY
XXX-YYY
XXXX-YYY在上述所有格式中,X表示英国邮政编码的外发代码。
发布于 2012-11-18 08:10:38
你能指望什么?什么应该匹配,什么不应该匹配?请给出一个你想测试的字符串的例子。
如果您将您的模式与"IM25“进行匹配,它将匹配,因为您允许在您的模式中使用IM[1-9],因此您将获得有效的部分匹配。如果您想要避免这种情况(我不确定您想要实现什么),并且希望在第一个字母后只允许一个数字,请使用“单词边界”\b,并准确地指定您希望允许的内容,如下所示:
(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的话。
更新
它仍然不清楚你的任务的上下文是什么。我假设你有一个有效的邮政编码列表,可能会更好,你提取邮政编码,或者只提取邮政编码的第一部分(为此,你最终可以使用正则表达式),并检查它是否在列表中。
发布于 2012-11-18 08:53:39
实际的验证在维基百科的网站上。谷歌有答案;) http://en.wikipedia.org/wiki/Postcodes_in_the_United_Kingdom#Validation
(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})https://stackoverflow.com/questions/13436030
复制相似问题