2011-06-13 123 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