【发布时间】:2010-11-16 15:31:18
【问题描述】:
我用的是正则表达式:
^(GIR 0AA)|(((A[BL]|B[ABDHLNRSTX]?|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})$
正确验证通常(有例外)可以是以下任何一种格式的英国邮政编码:
A9 9AA
A99 9AA
AA9 9AA
AA99 9AA
A9A 9AA
AA9A 9AA
我想更改我的表达方式,以便它允许正确的整个邮政编码(就像现在一样)或仅允许正确的邮政编码“第一部分”......所以使用上述示例之一:
AA9 是一种有效的格式
AA9 9AA 将是有效格式
AA 无效
AA9 9 无效
提前感谢,
吉姆
【问题讨论】:
-
一条评论:
^a|b|c$表示starts with a或has b``OR以 c. Your regex is probably wrong, you probably meant^(a|b|c)$` 结尾。 -
@Kobi ... 但该表达式正确匹配 CA16 4RR 的邮政编码??
-
没错。但是
^(GIR 0AA)|...|$允许部分匹配,它也会验证GIR 0AA:-)Extra Text here- 交替运算符|介于^和$之间。 (匹配是指从一个文本块中捕获文本,这里不是这个场景) -
谢谢 Kobi - 我现在明白你的意思了。 ^((GIR 0AA)|(((A[BL]|B[ABDHLNRSTX]?|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})?))$
标签: regex