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

时间:2010-11-16 15:31:18

标签: regex

我使用正则表达式:

^(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无效

谢谢你,

吉姆

2 个答案:

答案 0 :(得分: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'

答案 1 :(得分:0)

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

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