Validación PHP/regex para URL
He estado buscando una expresión regular simple para las URL. ¿Alguien tiene alguna a mano que funcione bien? No encontré uno con las clases de validación de Zend Framework y he visto varias implementaciones.
Utilice la filter_var()
función para validar si una cadena es URL o no:
var_dump(filter_var('example.com', FILTER_VALIDATE_URL));
Es una mala práctica utilizar expresiones regulares cuando no es necesario.
EDITAR : Tenga cuidado, esta solución no es segura para Unicode ni para XSS. Si necesita una validación compleja, tal vez sea mejor buscar en otro lado.
Utilicé esto en algunos proyectos, no creo haber tenido problemas, pero estoy seguro de que no es exhaustivo:
$text = preg_replace(
'#((https?|ftp)://(\S*?\.\S*?))([\s)\[\]{},;"\':<]|\.\s|$)#i',
"'<a href=\"$1\" target=\"_blank\">$3</a>$4'",
$text
);
La mayor parte de la basura aleatoria al final es para tratar situaciones como http://domain.example.
en una oración (para evitar coincidir con el punto final). Estoy seguro de que se podría limpiar, pero ya funcionó. Más o menos lo he copiado de un proyecto a otro.