0

我正在构建一个 Facebook 应用程序,它从用户的 Facebook 帐户中的各种来源获取 URL - 例如,用户的喜欢。

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

我希望能够处理这些字段中的字符串,以便像"http://google.com", "https://www.bankofamerica.com", "http://www.nytimes.com/2011/06/13/us/13fbi.html?_r=1&hp", "bit.ly",之类的 URL"www.pbs.org"都被接受。

"here is a random string of text the user entered"并且所有像,这样的字符串"here'\s ano!!! #%#$^ther weird random string"都被拒绝。

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

任何人都可以想出聪明的方法来正则表达式或以其他方式分析这些字符串,以便正确捕获“很多”URLS--80%?95% 99.995% 的 URL?

谢谢!


编辑:仅供参考,我正在用 Python 开发。但是与语言无关的解决方案也很棒。

4

2 回答 2

1

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

于 2011-06-13T18:29:14.570 回答
1

根据您的开发语言,有许多用于验证 URL 的工具。假设您正在使用 JavaScript 进行开发,那么快速的 Google 搜索会发现许多方法,具体取决于您需要的稳健性级别。

有关权威规范,请参见http://www.w3.org/Addressing/URL/url-spec.txt

于 2011-06-13T18:31:24.790 回答