验证英国邮政编码 - 短版和长版

时间:2016-12-05 11:50:16

标签: php regex postal-code

我在.gov网站上尝试过这个问题,如此处的许多问题所述,但它似乎不适用于简短的邮政编码。

我的正则表达式:

Function Test-Ping
{
Param($computer = "127.0.0.1")
  $ping = new-object System.Net.NetworkInformation.Ping
  Try
  {
  [void]$ping.send($computer,1)
  $Online = $true
  }

  Catch
  {
    $Online = $False
  }

  Return $Online
}

当我使用格式的长邮政编码时:preg_match('^(([gG][iI][rR] {0,}0[aA]{2})|((([a-pr-uwyzA-PR-UWYZ][a-hk-yA-HK-Y]?[0-9][0-9]?)|(([a-pr-uwyzA-PR-UWYZ][0-9][a-hjkstuwA-HJKSTUW])|([a-pr-uwyzA-PR-UWYZ][a-hk-yA-HK-Y][0-9][abehmnprv-yABEHMNPRV-Y]))) {0,}[0-9][abd-hjlnp-uw-zABD-HJLNP-UW-Z]{2}))^', $this->post['location'], $matches) 它有效,但格式为AA9 9ZZ之一。我需要以下格式才能工作:

  • AA9
  • AA99
  • AA9 9ZZ
  • AA99 9ZZ

3 个答案:

答案 0 :(得分:0)

根据你给出的模式并使第二部分可选,我得到:

~^(?:gir(?: *0aa)?|[a-pr-uwyz](?:[a-hk-y]?[0-9]+|[0-9][a-hjkstuw]|[a-hk-y][0-9][abehmnprv-y])(?: *[0-9][abd-hjlnp-uw-z]{2})?)$~i

demo

或使其更具可读性:

~ # pattern delimiter
^ # start of the string anchor
(?: # branch 1
    gir
    (?:[ ]*0aa)? # second part optional (branch 1)
  | # branch 2
    [a-pr-uwyz] # I put it in factor to shorten the pattern
    (?:
        [a-hk-y]?[0-9]+
      |
        [0-9][a-hjkstuw]
      |
        [a-hk-y][0-9][abehmnprv-y]
    )
    (?:[ ]*[0-9][abd-hjlnp-uw-z]{2})? # second part optional (branch 2)
)
$ # end of the string anchor
~ix

答案 1 :(得分:0)

由于英国邮政编码的工作方式,使用正则表达式验证它们并不是一个万无一失的解决方案。其中两个主要问题是:

  • 皇家邮政可能会更改某些邮政编码的格式,添加您选择使用的正则表达式未涵盖的子区域。
  • 通过正则表达式进行验证只能确保邮政编码根据您的正则表达式规则处于有效格式,而不是作为地址一部分存在的邮政编码。

皇家邮政提供PAF Database,其中包含所有英国地址,包括邮政编码。许多公司通过API和网站插件公开了这些数据。

例如,我在一家名为PCA Predict的公司工作,我们的解决方案已经a demo。这是一个在线结账表单的插件,允许客户开始键入他们地址的任何部分,并在他们选择他们的时候自动填写字段。

我们还提供REST API来静默验证和返回地址。

如果您需要任何有关地址验证的帮助,请随时发表评论,因为它可能比最初看起来更难!我也不是说你应该使用我们的服务,而是试一试,并且谷歌也有其他选择。

答案 2 :(得分:0)

我遇到了同样的问题,并且很难经常验证邮政编码,皇家邮政添加和删除邮政编码。所以在过去的两周里,我一直在建立一个地址数据库并且免费创建了一个非常讨厌的API,你可以验证邮政编码,它将返回该邮政编码的每个地址。​​

我希望这有用。

https://www.pervazive.co.uk/free-api-for-uk-postcode-lookup/

端点

GET: https://api.pervazive.co.uk/postcode.php?postcode=[POSTCODE]

响应

Request GET: -> https://api.pervazive.co.uk/postcode.php?postcode=AB10+1AB

返回格式:JSON

{"predictions":[
{"ID":"0","Address":"Aberdeen City Council, Marischal College, Broad Street, Aberdeen, Aberdeenshire, AB10 1AB","Postcode":"AB10 1AB"}
],"Execution_Time":"0.50983214378357","status":"200"}