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





На самом деле это очень сложная проблема. Вы можете приблизиться, но не идеально, с помощью регулярных выражений. Здесь есть очень хорошая разбивка потенциальных шаблонов регулярных выражений: 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+&@#/%=~_|$])
Остерегаться. Если интерактивные URL-адреса, генерируемые вашими пользователями, видны другим пользователям, вы столкнетесь с новыми проблемами, связанными с атаками с использованием межсайтовых сценариев и т.п. Кроме того, вам может потребоваться очистить URL-адреса. Например, в URL-адресе может быть амперсанд, но вам нужно его избежать.
Итак, на самом деле есть два шага. 1. Найдите URL-адрес. 2. Сделайте ссылку интерактивной.
Шаг 2, вероятно, сложнее.
Также будьте осторожны со скобками и т. д. Некоторые пользователи с удовольствием используют свои URL-адреса в предложениях, которые затем заканчиваются точкой. Например. Мне нравится http://www.pie.com.It - это хорошо. Один из лучших способов решить эту проблему - просто создать URL-адрес по мере ввода пользователем. Если что-то пойдет не так, они смогут сообщить об этом перед отправкой.
К счастью, это только внутренние справочные данные, поэтому атаки не представляют особой проблемы. URL-адреса уже есть в тексте, поэтому обращаться к ним по мере их ввода не вариант (хотя это было бы хорошей альтернативой).