2009-11-16 62 views

回答

7

圖書館/語言不可知的解決方案將使用谷歌的地理編碼器。它可以返回有關給定地址的詳細分解信息。

http://code.google.com/apis/maps/documentation/services.html#Geocoding_Structured

+0

+1看起來像一個很好的資源。但請記住,它可能允許解析部分地址,例如,如果您只給出國家和州,那麼對於這種部分信息可能沒問題,而如果您正在構建需要的應用程序要使用郵寄地址,那種開放式的補貼可能會讓你感到厭煩。*聳聳肩* – Kzqai 2009-11-16 21:43:53

+0

難道你不能只是驗證解析的結果嗎?也就是說,如果你不介意可能會觸及谷歌。 – 2009-11-17 06:16:46

2

如果你談論的是預先存在的數據,運氣好到你們。如果這是你控制輸入的東西,我建議在輸入級別創建地址的不同部分的分離。 Jus'的建議。

+0

我儘量保持界面簡單。我想讓用戶能夠簡單地在textarea中輸入地址,然後我會嘗試解析它。 – Andres 2009-11-16 02:48:50

+1

請記住,只提供一個開放式的字段,實際上是讓它更復雜,因爲您沒有對輸入指定任何強烈的要求,所以用戶 - 以信息格式你 - 不能解析。最好提供分隔的字段,然後爲可能不適合您的模式的地址提供「其他地址信息」字段。 – Kzqai 2009-11-16 21:39:08

3

編輯:如果你的數據是所有格式非常類似於使用這只是作爲一個例子。正如Strager指出的那樣,在大多數情況下,爲了有效地使用正則表達式,數據會有太大的變化。

假定你輸入的格式爲:

[Street Name], [State], [ZIP], [Country] 

此正則表達式將這樣的伎倆:

m/^(.+?),(.+?),([0-9]+),(.+)$/ 

不過正則表達式是相當複雜的......如果你要使用這個對於任何重要的事情,我會建議花時間學習正則表達式。我一直覺得這個小抄非常有用:

http://www.addedbytes.com/cheat-sheets/regular-expressions-cheat-sheet/

+4

由於地址有很多可能的形式,我不認爲正則表達式是可行的。 – strager 2009-11-16 02:49:44

+0

@Strager:很好,謝謝。編輯。 – 2009-11-16 03:18:14

+0

+1爲正則表達式備忘單,很有用,但我不認爲這個正則表達式將是一個開放地址字段的很好的解決方案。 – Kzqai 2009-11-16 21:23:58

0

問題是地址本身有各種形狀和大小,它們不是自我驗證的實體。這意味着如果沒有手工檢查地址(甚至可能容易出錯)或使用某種地址驗證軟件(無論是基於桌面的軟件還是聯機的),您都無法真正知道自己是否做得正確。

有許多地址驗證Web服務可以接收地址並將其分解爲其組成部分,並在結果經過認證有效的情況下以安全的方式進行。

我應該提到我是SmartyStreets的創始人。我們確實解決了驗證問題,其中包括您針對美國地址詢問的功能。我們的旗艦產品是Li​​veAddress,它是一個address verification web service API

+0

與SmartyStreets商業廣告的聲音一樣好,請注意 - 這僅適用於美國。 – 2014-01-13 10:50:29

+0

在我們的主頁上正確的是我們說的「USPS地址驗證」。 這是我們的FAQ頁面看: http://smartystreets.com/kb/faq/do-you-verify-international-addresses 下面是谷歌的搜索結果,我們對「美」的網站時 https://開頭www.google.com/search?q=site%3Asmartystreets.com+united+states – 2014-01-13 13:36:17

+0

夠公平的,刪除了我對disqus的評論,但論點仍然認爲,由於這個限制,SStreets只是局部解決一般問題地址驗證提出了這個問題。 – 2014-01-13 14:39:37

0

我發現,是專爲波蘭,但可能有一些修改工作,在其他地方一個PHP解析器地址:

PHP address parser

+0

如果有美國版本,肯定會贊成。 – 2012-08-27 19:57:35