Замените все URL и электронные письма в тексте на кликабельные ссылки в PHP - PullRequest
0 голосов
/ 19 декабря 2018

Исследуя информацию о регулярных выражениях в Интернете, я обнаружил замечательную функцию php:

function convert($input) {
   $pattern = '@(http(s)?://)?(([a-zA-Z0-9])([-\w]+\.)+([^\s\.]+[^\s]*)+[^,.\s])@';
   return $output = preg_replace($pattern, '<a href="http$2://$3">$0</a>', $input);
}

Я был размещен здесь на SO Геро Николовым в ЭТОТ ПОЧТА

Itпреобразует текстовые ссылки в кликабельные ссылки, как вы можете заметить в абзаце, это прекрасно работает.

Однако, и вот мой вопрос, когда этот код встречает адрес электронной почты, он опускает имя додомен электронной почты, а также @ вроде так: name @ domain.com Я предполагаю, что часть функции return должна быть изменена, чтобы включить ссылку на электронную почту, но я не уверен, как это будет интегрированов вышеуказанную функцию.Потребуется ли условное утверждение?Регулярное выражение для меня все еще ново, поэтому я не уверен, будет ли это правильное направление.

Тогда становится странным, когда ссылка находится в конце предложения, и это предложение заключено в одиночный илидвойные кавычки (как в пресс-релизе или статье).Случается так, что конечная пунктуация (точка, восклицательный знак, знак вопроса и т. Д.) Включается в ссылку вместе с заключительной цитатой, например: «Обязательно проверьте их веб-сайт по адресу domain.com." Если точка удаленазаключительная цитата по-прежнему включена в ссылку: «Обязательно зайдите на их сайт по адресу domain.com"

Все становится еще страннее, когда последнее слово обычного предложения (не включая текст ссылки) лежит в пределаходинарные или двойные кавычки.Например, последнее слово с его пунктуацией и закрывающей кавычкой оба превращаются в ссылку следующим образом: «Это первое предложение. Это второе предложение. И это последнее sentence." Если заключительная пунктуация (точка,и т. д.), ссылка не создается, и на заключительную цитату не влияют: «Это первое предложение.Это второе предложение.И это последнее предложение: "

Итак, еще раз, вопрос в том, как изменить эту функцию для обработки адресов электронной почты, а также для того, чтобы перестать добавлять конечную пунктуацию и закрывающие кавычки, если ссылка находится в конце цитируемогопредложение? Кроме того, как его можно изменить, чтобы оно не превращало последнее слово с конечной пунктуацией в ссылку, если оно в предложении в кавычках?

Я все еще новичок в работе с регулярными выражениями, поэтому любая помощь, ссылки,цениться в правильном направлении (ах). Есть еще одна вещь, которую делает эта функция, она делает ссылки из телефонных номеров, разделенных точками (как в 555.555.5555 превращается в 555.555.5555), но я думаю, что проблема может подождатьна данный момент. Опять же, я не прошу переписанный фрагмент кода, но некоторые указания будут весьма полезны, так как я не знаю, с чего начать, чтобы изменить это. Спасибо!

...