以纯文本格式识别URL

时间:2008-12-04 20:29:49

标签: asp.net regex url

这应该很容易,但我不确定如何最好地去做。我有一个WinForms应用程序,让用户输入长描述。有时,他们会键入URL,RichTextBox会识别它们并在显示时使它们可以点击。

我正在将应用移动到网络上,我不确定如何使这些相同的网址可点击。是否有一些半自动方式将“http://www.google.com”或“www.google.com”转换为可点击链接?我是否必须使用RegEx匹配?

2 个答案:

答案 0 :(得分:13)

这实际上是一个非常棘手的问题。你可以用正则表达式接近但不完美。这里有一个非常好的潜在正则表达式模式细分:http://www.regexguru.com/2008/11/detecting-urls-in-a-block-of-text/

他列出的最后一个似乎对大多数用途来说可能已经足够好了:

\b(?:(?:https?|ftp|file)://|www\.|ftp\.)
  (?:\([-A-Z0-9+&@#/%=~_|$?!:,.]*\)|[-A-Z0-9+&@#/%=~_|$?!:,.])*
  (?:\([-A-Z0-9+&@#/%=~_|$?!:,.]*\)|[A-Z0-9+&@#/%=~_|$])

答案 1 :(得分:3)

当心。如果用户正在生成的可点击URL对其他用户可见,那么您将引入跨站点脚本攻击等新问题。此外,您可能需要清理URL。例如,URL中可能有一个&符号,但您需要将其转义。

所以,实际上有两个步骤。 1.找到网址。 2.使网址可点击。

第2步可能更难。

另外,要注意括号之类的东西。一些用户乐于在句子中使用他们的URL,然后他们在一段时间内结束。例如。我喜欢http://www.pie.com.It很好。解决此问题的最佳方法之一就是将URL生成为用户类型。如果出现问题,他们可以在提交之前告诉我们。