在文本字符串中检测(淘气或漂亮)网址或链接

如何检测(使用正则表达式或启发式方法)一个文本字符串中的网站链接,如评论?

目的是防止垃圾邮件。 HTML被剥离,所以我需要检测复制和粘贴的邀请。 垃圾邮件发布者发布链接应该不经济,因为大多数用户无法成功访问该页面。 我希望提出建议,参考或讨论最佳做法。

一些目标:

  • 像结构良好的URL( http://some-fqdn/some/valid/path.ext
  • 网址但没有http://前缀(即有效的FQDN +有效的HTTP路径)
  • 任何其他有趣的业务
  • 当然,我正在阻止垃圾邮件,但是可以使用相同的过程来自动链接文本。

    思路

    这是我在想的一些事情。

  • 内容是本土语言的散文,所以我可以触发检测
  • 我应该先删除所有空白,以捕捉“ www .example.com ”? 普通用户是否知道自己删除空间,或者做任何浏览器“我是什么意思”并将其剥离给你?
  • 也许多次通过是一个更好的策略,扫描以下内容:
  • 格式良好的网址
  • 所有非空白符后跟'。' 之后是任何有效的TLD
  • 还要别的吗?
  • 相关问题

    我已经阅读过这些内容,现在它们在这里被记录下来,所以如果你愿意,你可以在这些问题中引用正则表达式。

  • 用HTML链接javascript替换URL
  • 什么是最好的正则表达式来检查一个字符串是否是一个有效的URL
  • 获取URL的部分(正则表达式)
  • 更新和总结

    哇,我有一些非常好的启发式在这里列出! 对我而言,最好的促销就是以下方面的综合:

  • @Jon Bright的检测顶级域名(TLD)的技术(一个很好的防御阻塞点)
  • 对于那些可疑的字符串,请按照@capar将点替换为点状字符
  • 一个好看点的角色是@ Sharkey的下标· (即“·”)。 · 也是一个字的边界,所以很难随意复制和粘贴。
  • 这应该使垃圾邮件发送者的CPM足够低以满足我的需求; “标志不当”用户反馈应该抓住其他任何东西。 列出的其他解决方案也非常有用:

  • 去除所有虚线四边形(@ Sharkey对他自己的答案的评论)
  • @ Sporkmonger对客户端Javascript的要求是在表单中插入一个必需的隐藏字段。
  • Ping URL服务器端以确定它是否是网站。 (也许我可以通过SpamAssassin或另一个贝叶斯过滤器按照@Nathan运行HTML。)
  • 查看Chrome的智能地址栏来源,了解Google使用的巧妙技巧
  • 向OWASP AntiSAMY或其他Web服务发送垃圾邮件/恶意软件检测。

  • 我正在集中努力避免垃圾邮件发送者。 这导致了两个假设:使用系统的人将因此积极地试图违反你的支票,你的目标只是检测URL的存在,而不是提取完整的URL。 如果你的目标是别的东西,这个解决方案看起来不一样

    我认为你最好的选择是与TLD合作。 有两个字母的ccTLD和(当前)比较小的其他列表。 这些需要以点为前缀,并以斜线或一些字边界作为后缀。 正如其他人所指出的,这不会是完美的。 在没有禁止合法的“我再次尝试,不起作用”或类似的情况下,没有办法获得“buyfunkypharmaceuticals。it”。 所有这些说,这将是我的建议:

    [^b].([a-zA-Z]{2}|aero|asia|biz|cat|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|tel|travel)[b/]
    

    事情会得到:

  • buyfunkypharmaceutical s.it
  • googl e.com
  • HTTP://stackoverflo**w.com/**questions/700163/
  • 只要人们开始混淆他们的URL,它就会中断,取代“。”。 与“点”。 但是,再次假设垃圾邮件制造者是你的目标,如果他们开始做这样的事情,他们的点击率将会下降几个数量级到零。 我认为,那些足够了解垃圾邮件网址的人以及那些不知情的人访问垃圾邮件网站,我认为这是一个小小的交叉点。 这个解决方案应该让你检测到复制和粘贴到地址栏的所有URL,同时将附带损害保持在最低限度。


    检查这些文章:

  • URL的问题
  • 检测文本块中的URL

  • 我不确定是否使用正则表达式检测URL是解决此问题的正确方法。 通常情况下,你会错过某些模糊的边缘案例,如果垃圾邮件发送者有足够的动机,他们将能够利用这种情况。

    如果您的目标只是将垃圾邮件过滤掉,那么您可能需要考虑贝叶斯过滤。 事实证明,将电子邮件标记为垃圾邮件是非常准确的,它也可以为您做同样的事情,具体取决于您需要过滤的文本的数量。

    链接地址: http://www.djcxy.com/p/18123.html

    上一篇: Detecting a (naughty or nice) URL or link in a text string

    下一篇: Build an ASCII chart of the most commonly used words in a given text