2013-11-16 5 views
-4

Я спорил со многими regexp, чтобы найти один, поддерживающий просто www. * .com url без необходимости устанавливать http: // before.Связать текст с www. *** PHP

В настоящее время я использую:

$text= preg_replace("/(^|[\n ])([\w]*?)((ht|f)tp(s)?:\/\/[\w]+[^ \,\"\n\r\t<]*)/is", "$1$2<a href=\"$3\" >$3</a>", $text); 
$text= preg_replace("/(^|[\n ])([\w]*?)((www|ftp)\.[^ \,\"\t\n\r<]*)/is", "$1$2<a href=\"http://$3\" >$3</a>", $text); 
$text= preg_replace("/(^|[\n ])([a-z0-9&\-_\.]+?)@([\w\-]+\.([\w\-\.]+)+)/i", "$1<a href=\"mailto:[email protected]$3\">[email protected]$3</a>", $text); 

, но это не достаточно, есть идеи?

+0

Что означает «недостаточно»? –

ответ

0

Я предлагаю вам использовать наивное регулярное выражение, а затем фильтр FILTER_VALIDATE_URL. пример:

$text = preg_replace_callback('~(?:(\b(?:ht|f)tps?://)|\bwww\.)[^\s"\')(,]+~i', 
    function ($m) { 
     $url = ($m[1]? '':'http://') . $m[0]; 
     return (filter_var($url, FILTER_VALIDATE_URL)) ? 
      '<a href="' . $url . '">' . $m[0] . '</a>' : $m[0]; }, 
    $text); 
Смежные вопросы