2016-12-05 55 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"}