Какой хороший способ сделать «пользовательские» гиперссылки автоматически интерактивными?

#regex #asp.net-mvc #hyperlink

#регулярное выражение #asp.net-mvc #гиперссылка

Вопрос:

У меня есть asp.net веб-страница mvc, на которой я запрашиваю данные из базы данных и показываю информацию в таблице, и иногда в содержимом есть ссылки, и я хочу сделать их интерактивными, но самое интересное, что некоторые из этих ссылок являются нашими пользовательскими внутренними ссылками, которые не имеют префикса «http». Так, например, если у меня есть ссылка, которая выглядит следующим образом:

 home://ticket/162-4737
  

таким образом, содержимое ячейки таблицы может быть:

    We are dependent on this ticket: home://ticket/162-4737 to 
   complete the work
  

как я могу автоматически сделать это интерактивным на веб-странице. Должен ли я выполнить поиск и замену регулярных выражений на стороне сервера и заменить ссылку выше чем-то вроде этого

 <a href='home://ticket/162-4737'/>home://ticket/162-4737</a>
  

или есть какой-то другой рекомендуемый способ сделать это?

Комментарии:

1. ДА. Регулярное выражение — это способ сделать что-то подобное. Если ваш контент представляет собой обычный текст, используйте регулярное выражение. Если это markdown или что-то еще, все становится немного сложнее.

2. Для этого я бы выбрал регулярное выражение. У вас есть это, или вам нужна помощь с этим?

3. Зависит от того, насколько «хорошо» вы хотите. См. blog.codinghorror.com/the-problem-with-urls

4. @zx81 — есть предложения?

Ответ №1:

В комментариях вы запросили предложение для регулярного выражения. Я бы предложил что-то вроде этого:

Поиск: home://S

Заменить: <a href='$_' />$_</a>

  • home:// соответствует буквенным символам
  • S соответствует любым символам, которые не являются пробелами (пробел, табуляция, новые строки …)
  • При замене $_ является ASP.NET синтаксис для вставки всего совпадения.

В коде C # (по вашему запросу в комментариях):

 resultString = Regex.Replace(yourString, @"home://S ", "<a href='$_' />$_</a>");
  

Комментарии:

1. спасибо за ответ. не могли бы вы немного подробнее пояснить, как вы можете использовать $_ для выполнения замены find в коде C #. я просто собирался использовать string.replace, но только что понял, что мне нужно сделать его динамичным

2. Да! Добавил это в нижней части ответа. 🙂 Пожалуйста, дайте мне знать, если это сработает для вас.

3. Привет, Леора, вслед за этим, ответ решил это для вас, или вопрос все еще там?

4. большую часть времени это работает, но я нашел случай, когда этого не происходит — исходный текст «Ticket-11- Error (home:// ticket / 162-6770)», и ваш ответ, похоже, включает весь текст (начиная с Ticket, а не только с домашнего URL

5. @leora Все дело в том, чтобы знать, что может быть разделителем для конца вашего URL. Если вы говорите, что ) это наверняка никогда не произойдет в URL-адресе, тогда вместо использования S мы используем [^)s] , и регулярное выражение становится home://[^)s] Просто замените это в коде C # и дайте мне знать, если оно делает то, что вы хотите. 🙂 Кроме того, если есть другие запрещенные символы, добавьте их в класс отрицательных символов [^)s] Вчерашний подход был быстрым подходом, учитывая форму ввода, которую вы нам показали, но его можно усовершенствовать. Будет отключен на ночь, надеюсь, это поможет. 🙂