Facebook 承认;“无效”;不尝试解析它们的URL

Facebook 承认;“无效”;不尝试解析它们的URL,facebook,http,url,facebook-graph-api,url-pattern,Facebook,Http,Url,Facebook Graph Api,Url Pattern,我正在构建一个Facebook应用程序,它可以从用户的Facebook账户中获取各种来源的URL——例如,用户的喜好 我遇到的一个问题是,许多Facebook条目的“网站”和“链接”字段中都有字符串,而不是URL。Facebook不检查用户输入,因此这些字段基本上可以包含任何字符串 我希望能够处理这些字段中的字符串,使URL像”http://google.com“,”https://www.bankofamerica.com“,”http://www.nytimes.com/2011/06/13

我正在构建一个Facebook应用程序,它可以从用户的Facebook账户中获取各种来源的URL——例如,用户的喜好

我遇到的一个问题是,许多Facebook条目的“网站”和“链接”字段中都有字符串,而不是URL。Facebook不检查用户输入,因此这些字段基本上可以包含任何字符串

我希望能够处理这些字段中的字符串,使URL像
”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'\s ano!!!!%$^另一个奇怪的随机字符串”
,都被拒绝

在我看来,要“确定”一个URL的唯一方法是尝试解析它,但我相信这将是资源密集型的

有谁能想出一个聪明的方法来使用正则表达式或者分析这些字符串,从而正确地捕获“很多”URL——80%?95%99.995%的URL

谢谢


编辑:仅供参考,我正在用Python开发。但是语言不可知的解决方案也很好。

如果您想确保主机名没有拼写错误,我会首先匹配
“^(?:https?:/)?([a-Za-z0-9-\.]+)/”
,然后对该主机名进行DNS查找(缓存)。95%技术使用顶级域的白名单(或它们的一些正则表达式),当新域(.info、.eu、.biz、.aero)可用时,您必须维护这些白名单。
在URL中也有某些字符是不允许的(未转义的)-但是,有些人确实会输入URL,如
“http://example.com/I “不想去!!!”
然后他们的浏览器将其转义到有效的
“…I%20don%27t%20want%20go%21%21”

根据您的开发语言,有许多用于验证URL的工具。假设您是用JavaScript开发的,快速的Google搜索会发现许多方法,这取决于您需要的健壮性级别


有关权威规范,请参阅。

我强烈建议不要使用DNS进行URL验证,因为很可能存在无法通过DNS解析的语法有效URL,并且取决于服务器当前访问域名服务的状态,通常可解析的URL在任何特定时刻都可能无法解析。