Facebook 的 URL 匹配算法是如何工作的? [复制]
Posted
技术标签:
【中文标题】Facebook 的 URL 匹配算法是如何工作的? [复制]【英文标题】:How does Facebook's URL matching algorithm work? [duplicate] 【发布时间】:2013-08-19 14:05:31 【问题描述】:你知道如果你去 facebook.com 并在状态更新文本区域中输入一个 URL,它将自动被检测到,Facebook 会显示来自该 URL/链接的数据的小快照? Facebook 甚至不在乎您输入的 URL 是否带有http://
之类的协议。
我希望复制这种行为。现在我有这个正则表达式:
((?:https?:\/\/)?)((?:[a-zA-Z0-9\-]+\.)+(?:com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|travel|[a-z]2)(?:[a-z0-9\._\/~%\-\+&\#\?!=\(\)@]*)?(?:#?(?:[w]+)?)?)
我用它来匹配在文本区域中输入的 URL。但是,它有误报;它将匹配document.write(foo)
,这显然不是一个URL。
Facebook 似乎没有这个问题。事实上,我可以在 Facebook 的 textarea 中输入“yahoo.com”,它会将其识别为 URL。但如果我输入“example.com”,它就不会识别它。因此,这意味着 Facebook 必须做的不仅仅是正则表达式匹配。还是我错了?
总之,我想知道 Facebook 在做什么,我想知道如何复制它。非常感谢任何想法、提示或解决方案。
感谢阅读。
【问题讨论】:
这个问题似乎跑题了,因为它是关于闭源网络服务的实现细节。 【参考方案1】:匹配任何 url 的最简单的正则表达式是
[a-z_\.\-0-9]+\.[a-z]+
如果存在,请查找结果。如果结果失败,那么它不是一个 url。
如果一个 url 在没有 http:// 前缀的情况下呈现给您,则没有保存方法来判断它是否是一个 url。
正则表达式将匹配以下字符串中的 ***.com ;
我总是使用 ***.com 来找到我需要的答案。
如果您尝试"http://www." & regex.match.value
,您应该会得到一个有效的网址......或者不是......你不会知道,直到你进行查找。
【讨论】:
唯一的问题,以及我在帖子中介绍的正则表达式,是有误报的机会。有人可以输入“没什么。你也怎么了?”并且“much.what”将匹配为 URL。我想解决这个问题的唯一方法是检查域在服务器端是否有效。 如果不查找,就无法提前知道 url 是否为 url。即使stockoverfliw.com 可能会失败,尽管它是有效的 url 格式,但没有 webste 存在。您会得到误报,但您需要进行查找以确定。【参考方案2】:也许在发布猜测的 url 之前,它会执行 ajax ping 或其他操作以确保候选 url 在呈现之前确实存在?
【讨论】:
【参考方案3】:facebook 正在使用 contenteditable div 来检测链接, 在你的最后,我建议你听每一个按键,因为它有多种用途,例如按下@后你也会看到朋友列表
【讨论】:
以上是关于Facebook 的 URL 匹配算法是如何工作的? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
应用程序域必须与 Facebook Web Games URL (https)、移动站点 URL、Unity 二进制 URL、站点 URL 或安全页面选项卡 URL 的域匹配
如何在 iOS 6 上将多个 URL 共享到 Facebook