代码之家  ›  专栏  ›  技术社区  ›  BIDeveloper

正则表达式,英国邮政编码,轻微修改?

  •  0
  • BIDeveloper  · 技术社区  · 14 年前

    我使用正则表达式:

    ^(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 9a a是有效的格式

    AA无效

    AA9 9无效

    感谢前程,

    吉姆

    2 回复  |  直到 14 年前
        1
  •  1
  •   J V    14 年前

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

    这是你的一个小改动:

    ^(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
  •  0
  •   Atul Dravid    14 年前

    我在cakephp框架中使用这个,为我工作。。。

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