我正在构建一个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"
,"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%的网址?
谢谢!
答案 0 :(得分:1)
我首先匹配"^(?:https?://)?([A-Za-z0-9-\.]+)/"
,然后为该主机名执行DNS查找(缓存),如果您想确保主机名没有拼写错误。 95%的技术使用顶级域名的白名单(或者它们的一些正则表达式),当新的(.info,.eu,.biz,.aero)可用时,您必须维护这些白名单。
在URL中也有一些不允许(未转义)的字符 - 但是,有些人确实输入了"http://example.com/I don't wanna go!!!"
这样的网址,然后他们的浏览器会将其转义为有效的"...I%20don%27t%20wanna%20go%21%21%21"
。
答案 1 :(得分:1)
根据您的开发语言,有许多工具可用于验证URL。假设您正在使用JavaScript进行开发,Google快速搜索可以发现许多方法,具体取决于您需要的健壮程度。