Patrón REGEX para validación de URL

Estoy usando esta función de PHP para validar una URL.

$url = preg_replace("/[^A-Za-z0-9-\/\.\:]/", "", trim($url));
$url = preg_replace('%^(?!https?://www\.).*%', 'http://www\.$0', $url);

Pero esto no es perfecto para mí. Quiero estos controles:

1 - ¿Está comenzando con http:// or https:// ? Si no, agregue http (o https)

2 - Si no tiene subdominio y si no lo tiene www , agregar . Pero si tiene subdominio no agregue www.

Ejemplos:

example.com
CONVERT -> http://www.example.com

www.example.com
CONVERT -> http://www.example.com

subdomain.example.com
CONVERT -> http://subdomain.example.com

http://subdomain.example.com
CONVERT -> http://subdomain.example.com

Entonces, necesito mejorar mi patrón REGEX. Pero no puedo. ¿Cómo puedo usar esto?

preguntado el 08 de enero de 11 a las 21:01

La primera expresión regular eliminará demasiados caracteres válidos de cualquier ruta de URL existente y fallará en cualquier novedad http://[::1]/~user/a+b?x=1#2. -

1 Respuestas

Eliminar el www\. desde la segunda expresión regular. Esto lo haría funcionar en los ejemplos de subdominios.

Si desea hacerlo más inteligente, utilice un if y una segunda expresión regular para verificar ^(\w+://)?\w+\.\w+$ antes de prefijarlo con http: // o un www adicional.

Respondido el 09 de enero de 11 a las 00:01

¿Cómo puedo usar la segunda expresión regular con PHP? - Eray

preg_match ("^ (\ w +: //)? \ w + \. \ w + $", $ url)? - Eray

necesita recintos de expresiones regulares, pero sí - Mario

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.