Распознать URL в текстовом формате - PullRequest
9 голосов
/ 04 декабря 2008

Это должно быть легко, но я не уверен, как лучше это сделать. У меня есть приложение WinForms, которое позволяет пользователю вводить длинные описания. Иногда они вводят URL-адреса, и RichTextBox распознает их и делает их кликабельными при отображении.

Я перемещаю приложение в Интернет, и я не уверен, как сделать те же самые URL кликабельными. Есть ли какой-нибудь полуавтоматический способ преобразования "http://www.google.com"" или "www.google.com" в кликабельные ссылки? Нужно ли прибегать к соответствию RegEx?

Ответы [ 2 ]

13 голосов
/ 04 декабря 2008

Это на самом деле очень сложная проблема. Вы можете подобраться, но не идеально, с помощью регулярных выражений. Здесь есть очень хорошая разбивка потенциальных шаблонов регулярных выражений: 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+&@#/%=~_|$])
3 голосов
/ 04 декабря 2008

Осторожно. Если кликабельные URL, которые генерируют ваши пользователи, видны другим пользователям, вы будете вводить новые проблемы с атаками с использованием межсайтовых сценариев и т.п. Также вам может потребоваться очистить URL-адреса. Например, в URL-адресе может быть амперсанд, но вам нужно его избежать.

Итак, на самом деле есть два шага. 1. Найдите URL. 2. Сделайте URL кликабельным.

Шаг 2, вероятно, более сложный.

Кроме того, будьте осторожны с такими вещами, как скобки и тому подобное. Некоторые пользователи с радостью используют свои URL в предложении, которое затем заканчивается точкой. Например. Мне нравится http://www.pie.com.It это хорошо. Один из лучших способов решить эту проблему - просто создать URL-адрес в качестве пользовательских типов. Если что-то пойдет не так, они смогут сообщить об этом перед отправкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...