【问题标题】:Reguar Expression, UK Post Code, Slight Amendment?正则表达式,英国邮政编码,轻微修改?
【发布时间】: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


【解决方案1】:

看起来还有更多优化可用,但这取决于代码的复杂性...

这是对你的轻微修改:

^(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})?)$

如您所见, ?使最后一部分可选

 [0-9][ABD-HJLNP-UW-Z]{2})$
( [0-9][ABD-HJLNP-UW-Z]{2})?)$

修改 aadravid 的更简单的版本(如果你想要一个不那么严格的版本)

'/\\A\\b[A-Z]{1,2}[0-9][A-Z0-9]?( [0-9][ABD-HJLNP-UW-Z]{2})?\\b\\z/i'

【讨论】:

    【解决方案2】:

    我从 cakephp 框架中使用它并为我工作......

    '/\\A\\b[A-Z]{1,2}[0-9][A-Z0-9]? [0-9][ABD-HJLNP-UW-Z]{2}\\b\\z/i'
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多