2011-06-13 113 views
0

我正在構建Facebook應用程序,該應用程序可從用戶的Facebook帳戶中的各種來源獲取網址 - 例如用戶喜歡的網址。無法解析它們的網址會識別「無效」網址

我遇到的一個問題是,許多Facebook條目都有字符串,它們的「網站」和「鏈接」字段中沒有網址。 Facebook不檢查用戶輸入,所以這些字段基本上可以包含任何字符串。

我希望能夠處理在這些領域中的字符串,從而網址像"http://google.com""https://www.bankofamerica.com""http://www.nytimes.com/2011/06/13/us/13fbi.html?_r=1&hp""bit.ly""www.pbs.org"都接受。

而所有的字符串如"here is a random string of text the user entered","here'\s ano!!! #%#$^ther weird random string"都被拒絕。

在我看來,「確定」URL的唯一方法就是試圖解決它,但我相信這將是非常耗費資源的。

任何人都可以想到巧妙的方式來正則表達式或以其他方式分析這些字符串,使得「很多」的URL被正確捕獲 - 80%? 95%99.995%的網址?

謝謝!


編輯:僅供參考,我正在用Python開發。但是語言不可知的解決方案也很棒。

回答

1

根據您的開發語言,有許多驗證URL的工具。假設您正在使用JavaScript進行開發,快速Google搜索會發現許多方法,具體取決於您需要的強壯程度。

查看http://www.w3.org/Addressing/URL/url-spec.txt的權威性規範。

1

我首先匹配"^(?:https?://)?([A-Za-z0-9-\.]+)/",然後爲該主機名執行DNS查找(緩存),如果您想確保主機名不拼寫錯誤。 95%的技術使用頂級域名白名單(或其中的一些正則表達式),當新域名(.info,.eu,.biz,.aero)變得可用時,您必須保留這些白名單。 也有一些字符是不允許的(非轉義的)在URL中 - 但是,有些人輸入瞭如"http://example.com/I don't wanna go!!!"這樣的URL,然後他們的瀏覽器將其轉移到有效的"...I%20don%27t%20wanna%20go%21%21%21"

+0

我強烈建議不要使用DNS進行URL驗證,因爲它很可能具有無法通過DNS解析的語法有效URL,並且取決於服務器當前對域名服務的訪問狀態,通常可解析的URL可能不會在任何特定時刻解決。 – 2011-06-13 18:34:09