我正在与许多正则表达式争论找到一个支持简单的www。 * .com url,而不需要在之前输入http://。
目前我正在使用:
$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:$2@$3\">$2@$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);