2016-12-05 43 views
1

我已经尝试过.gov网站上的一个,如许多问题所述,但它似乎不适用于短邮政编码。验证英国邮政编码 - 短期和长期版本

我的正则表达式:

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犯规之一。我需要以下格式的工作:

  • AA9
  • AA99
  • AA9 9ZZ
  • AA99 9ZZ
+0

首先,不要使用''^作为分隔符的图案和使用它带'''给ancho你的模式。用非捕获组替换捕获组,使用i标志,删除无用的组。 –

+0

@CasimiretHippolyte ive改变了现在,正则表达式似乎验证长的postcode,但不是缩短的版本。 –

+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 
0

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

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

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

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

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

如果您需要任何有关地址验证的帮助,请随时发表评论,因为它可能比最初看起来更难!我也不是说你应该使用我们的服务,但是请放手一下,并让Google了解其他选项。

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"}