Validar urls con php

Me he topado con una función que permite validar urls de diferentes tipos:

https://usuario:contraseña@www.cualquiersitio.com:8080/login.php?do=login&style=%23#pagetop
http://usuario@www.cualquiersitio.com/#pagetop
https://cualquiersitio.com/index.html
ftp://usuario:****@cualquiersitio.com:21/
http://cualquiersitio.com/index.html/


//se le envía una cadena y devuelve true si es uan url válida o false en caso contrario
function url_valida($url){
  static $urlregex = "^(https?|ftp)\:\/\/([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?[a-z0-9+\$_-]+(\.[a-z0-9+\$_-]+)*(\:[0-9]{2,5})?(\/([a-z0-9+\$_-]\.?)+)*\/?(\?[a-z+&\$_.-][a-z0-9;:@/&%=+\$_.-]*)?(#[a-z_.-][a-z0-9+\$_.-]*)?\$";

return eregi($urlregex, $url);

}

Explicación paso a paso:

function url_valida($url){
//TIPO DE CONEXIÓN
$urlregex = "^(https?|ftp)\:\/\/";

//USUARIO Y CONTRASEÑA (opcional)
$urlregex .= "([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?";

//EL NOMBRE DE LA WEB O LA IP
$urlregex .= "[a-z0-9+\$_-]+(\.[a-z0-9+\$_-]+)*"; // http://x = allowed (ejemplo. http://localhost, http://routerlogin)
//$urlregex .= "[a-z0-9+\$_-]+(\.[a-z0-9+\$_-]+)+"; // http://x.x = minimum
//$urlregex .= "([a-z0-9+\$_-]+\.)*[a-z0-9+\$_-]{2,3}"; // http://x.xx(x) = minimum

//PUERTO (opcional)
$urlregex .= "(\:[0-9]{2,5})?";

//RUTA (opcional)
$urlregex .= "(\/([a-z0-9+\$_-]\.?)+)*\/?";

//GET de la ruta (opcional)
$urlregex .= "(\?[a-z+&\$_.-][a-z0-9;:@/&%=+\$_.-]*)?";

//ANCLA de la ruta (opcional)
$urlregex .= "(#[a-z_.-][a-z0-9+\$_.-]*)?\$";

//COMPROBAMOS
return eregi($urlregex, $url);
}

Desarrollo Juegos Flash paso a paso

El tema de la semana es una iniciativa que se esta llevando en stratos. Su finalidad no es otra que compartir el conocimiento que sus usuarios han adquirido a lo largo de los años.

Así que básicamente consiste en proponer temas del mundo del desarrollo de videojuegos e iniciar cada semana un debate en el que aportar y contrastar las opiniones de todos.
Detalles: Saber más

Hoy ha dado comienzo el sexto debate : “Desarrollo Juegos Flash paso a paso”.
Los encargado de abrir el debate han sido mi-go y zwiTTeR.
Si deseas participar no tienes más que compartir tu opinión aquí.

Si te has perdido alguno tienes el historial aquí.

Juegos Multiplataforma Desarrollo y Rentabilidad

El tema de la semana es una iniciativa que se esta llevando en stratos. Su finalidad no es otra que compartir el conocimiento que sus usuarios han adquirido a lo largo de los años.

Así que básicamente consiste en proponer temas del mundo del desarrollo de videojuegos e iniciar cada semana un debate en el que aportar y contrastar las opiniones de todos.
Detalles: Saber más

Hoy ha dado comienzo el quinto debate : “Juegos Multiplataforma Desarrollo y Rentabilidad”.
Los encargado de abrir el debate han sido Buffon y Prompt.
Si deseas participar no tienes más que compartir tu opinión aquí.

Si te has perdido alguno tienes el historial aquí.