仅限英格兰邮政编码的正则表达式

Rob*_*bie 5 regex postal-code

我有一个Asp.Net网站,我想使用RegularExpressionValidator检查英国邮政编码是否为英文(即不是苏格兰,威尔士或N.Irish).

应该可以通过仅使用第一个segmant(称为Postcode Area)中的字母来查看邮政编码是否为英文.总共有124个邮政编码区域,是它们的列表.

从该列表中,以下邮政编码区域不在英格兰.

  • ZE,KW,IV,HS,PH,AB,DD,PA,FK,G,KY,KA,DG,TD,EH,ML(苏格兰)
  • LL,SY,LD,HR,NP,CF,SA(威尔士)
  • BT(N.Ireland)

正则表达式的输入可以是整个邮政编码,也可以只是邮政编码区域.

任何人都可以帮我创建一个只有在给定的邮政编码是英文时才能匹配的正则表达式吗?

编辑 - 解决方案

在几张海报的帮助下,我能够创建以下正则表达式,我已成功测试了1500多个测试用例.

^(AL | B | B [ABDHLNRS] | C [ABHMORTVW] | D [AEHLNTY] | E | E [CNX] | FY | G [LUY] | H [ADGPUX] | I [GM P] | JE | KT | L | L [AENSU] | M | ME | N | N [EGNRW] | O [LX] | P [ELOR] | R [GHM] | S | S [EGKLMNOPRSTW] | T [AFNQ RSW ] | UB | W | W [ACDFNRSV] | YO)\ d {1,2}\S(\ d [\ W] {2})?

小智 9

我已经回答了一次,指出不可能提出100%正确的英格兰唯一的正则表达式(因为邮政编码区域不在于政治边界).

然而,我已经深入研究了这一点,并且......这可能的,但这是很多工作.

要验证仅限英格兰的邮政编码,您需要排除非英文邮政编码.容易的是:

  • BT(北爱尔兰)
  • IM(马恩岛)
  • JE(泽西岛)
  • GG(根西岛)
  • BF(英国军队)
  • BX(非地理英国邮政编码)
  • GIR(Girobank,也是非地理的)

(我不打算提到英国以外地区的英国式邮政编码,如圣赫勒拿,直布罗陀等.从技术上讲,马恩岛和海峡群岛也不是英国的一部分,但它们距离更近通过,并与英国皇家邮政系统更紧密地联系在一起.)

纯苏格兰邮政编码区域(正如您所提到的):

ZE,KW,IV,HS,PH,AB,DD,PA,FK,G,KY,KA,EH,ML

DGTD名义上是苏格兰人,在苏格兰大部分时间都是苏格兰人.然而,一些地区延伸到苏格兰 - 英格兰边境,如下:

  • DG16 - 在英格兰的一点点
  • TD9 - 英格兰的一小部分
  • TD12 - 英格兰的一半
  • TD15 - 主要在英格兰

细目如下:

除了以下英文邮政编码外,DG16在苏格兰:

  • DG16 5H [TUZ]
  • DG16 5J [AB]

TD9是苏格兰除了TD9 0T [JPRSTUW]

TD12只有一个部门(TD12 4),大约在英格兰和苏格兰的一半左右:

  • TD12 4 [ABDEHJLN]在苏格兰
  • TD12 4 [QRSTUWX]在英格兰

TD15是最复杂的.有3个部门,其中TD15 2TD15 9完全在英格兰.

TD15 1分布在英格兰和苏格兰.

以下开头的邮政编码在苏格兰:

  • TD15 1T
  • TD15 1X

......除了这些英文邮政编码:

  • TD15 1T [ABQUX]
  • TD15 1XX

TD15 1中的所有其他邮政编码均在英格兰,但开头如下:

  • TD15 1B
  • TD15 1S(即TD15 1S [ABEJLNPWXY])
  • TD15 1U(即TD15 1U [BDENPQRTUXY])

......除了苏格兰的以下邮政编码外,全部都在英格兰:

  • TD15 1BT
  • TD15 1S [UZ]
  • TD15 1U [FGHJLSZ]

英国邮政编码区CANE位于英格兰 - 苏格兰边境的另一边,但他们从未延伸到苏格兰.

事实上,英国邮政编码的最后两个字母是基于邮递员实际发布的信息(据我所知),因此不会理所当然地认为它将落入政治边界.因此,如果有一组跨越边界的房屋,则整个邮政编码(即最细粒度的水平)可能不完全位于英格兰或苏格兰境内.例如TD9 0TJTD15 1UZ非常接近边界,我不确定他们是否完全在一边.

英格兰 - 威尔士的边界也很复杂,但我会把这作为读者的练习.


Joh*_*web 4

\n

英国有 124 个邮政编码区。

\n
\n\n

- PAF\xc2\xae\n 2012 年 8 月统计数据通过 英国邮政编码列表(维基百科)

\n\n

我建议将您的问题分成两部分(思考函数):

\n\n
    \n
  1. 邮政编码有效吗?

    \n\n

    英国邮政编码正则表达式(综合)

  2. \n
  3. 邮政编码是英文吗?

    \n\n

    这可以进一步细分:

    \n\n
      \n
    • 不是苏格兰人:\n\n
        \n
      • ! /^(ZE|KW|IV|HS|PH|AB|DD|PA|FK|G|KY|KA|DG|TD|EH|ML)[0-9]/
      • \n
    • \n
    • 不是威尔士语:\n\n
        \n
      • ! /^(LL|SY|LD|HR|NP|CF|SA)[0-9]/
      • \n
    • \n
    • 不是北爱尔兰、马恩岛、海峡群岛……\n\n
        \n
      • 等等...
      • \n
    • \n
    • 或者您可以只检查邮政编码区域是否在一百个左右的英文邮政编码区域之一,具体取决于您要如何优化 \xe2\x98\xbb
    • \n
  4. \n
\n\n

请注意,语法会根据您的编程语言而有所不同。\n在一个正则表达式中完成所有这些操作很快就会变得难以管理。

\n