Pregunta
¿Cual expresión regular usar para validar una URL con PHP?
Responder esta pregunta por dudin el 2009-06-19
Estoy buscando una expresión regular que me permita validar y extraer las URLs que se encuentran dentro de un texto.
Respuestas
https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)? PHP Example: Automatically link URL's inside text. $text = preg_replace('@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@', '<a href="$1">$1</a>', $text);Trozo de código tomado de Snipplr.com. Enviado por tylerhall el 21-3-2007
por maikel el 2009-06-19
He usado este patrón y me ha dado resultados bastante buenos:
Al usarlo en una función autolink resulta:
$patron = "/((\s+(http[s]?:\/\/)|(www\.))?(([a-z][-a-z0-9]+\.)?[a-z][-a-z0-9]+\.(([a-zA-Z]{2}|aero|asia|biz|cat|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|tel|travel)(\.[a-z]{2,2})?))\/?[a-z0-9._\/~#&=;%+?-]+[a-z0-9\/#=?]{1,1})/is"
Al usarlo en una función autolink resulta:
function UrlParser($texto)
$patron = "/((\s+(http[s]?:\/\/)|(www\.))?(([a-z][-a-z0-9]+\.)?[a-z][-a-z0-9]+\.(([a-zA-Z]{2}|aero|asia|biz|cat|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|tel|travel)(\.[a-z]{2,2})?))\/?[a-z0-9._\/~#&=;%+?-]+[a-z0-9\/#=?]{1,1})/is";
$str = uniqid('');
$i=0;
$codes = array();
while (preg_match($patron, $texto, $matches) ) {
$i++;
$link= isset($matches[0])?$matches[0]:'';
if(strrpos($link,'http://')=== false) $link= 'http://'. $link;
$short_link = (strlen($link)>35)?self::tinyUrl($link):$link;
$codes[$i]['link'] = ' <a rel="external nofollow" title="'.$link.'" href="'.$short_link.'">'.$short_link.'</a> ';
$texto = preg_replace($patron , $str.$i, $texto, 1);
}
$i=0;
while (preg_match("#".$str."([0-9]+)#", $texto, $matches)) {
$i++;
$texto = preg_replace("#".$str."([0-9]+)#", $codes[$i]['link'] , $texto, 1);
}
return $texto;
}
por maikel el 2009-06-19



