Saltar al contenido

Patrón de expresión regular para hacer coincidir la URL con o sin http: // www

Solución:

Para hacer coincidir todo tipo de URL, el siguiente código debería funcionar:

<?php
    $regex = "((https?|ftp)://)?"; // SCHEME
    $regex .= "([a-z0-9+!*(),;?&=$_.-]+(:[a-z0-9+!*(),;?&=$_.-]+)[email protected])?"; // User and Pass
    $regex .= "([a-z0-9-.]*).(([a-z]{2,4})|([0-9]{1,3}.([0-9]{1,3}).([0-9]{1,3})))"; // Host or IP
    $regex .= "(:[0-9]{2,5})?"; // Port
    $regex .= "(/([a-z0-9+$_%-].?)+)*/?"; // Path
    $regex .= "(?[a-z+&$_.-][a-z0-9;:@&%=+/$_.-]*)?"; // GET Query
    $regex .= "(#[a-z_.-][a-z0-9+$%_.-]*)?"; // Anchor
?>

Entonces, la forma correcta de verificar la expresión regular es la siguiente:

<?php
   if(preg_match("~^$regex$~i", 'www.example.com/etcetc', $m))
      var_dump($m);

   if(preg_match("~^$regex$~i", 'http://www.example.com/etcetc', $m))
      var_dump($m);
?>

Cortesía: Comentarios hechos por salpicadura manía en el manual de PHP: http://php.net/manual/en/function.preg-match.php

Demostración de RegEx en regex101

Esto funcionó para mí en todos los casos que había probado:

$url_pattern = '/((http|https)://)?[a-zA-Z0-9./?:@-_=#]+.([a-zA-Z0-9&./?:@-_=#])*/';

Pruebas:

http://test.test-75.1474.stackoverflow.com/
https://www.stackoverflow.com
https://www.stackoverflow.com/
http://wwww.stackoverflow.com/
http://wwww.stackoverflow.com


http://test.test-75.1474.stackoverflow.com/
http://www.stackoverflow.com
http://www.stackoverflow.com/
stackoverflow.com/
stackoverflow.com

http://www.example.com/etcetc
www.example.com/etcetc
example.com/etcetc
user:[email protected]/etcetc

example.com/etcetc?query=aasd
example.com/etcetc?query=aasd&dest=asds

http://stackoverflow.com/questions/6427530/regular-expression-pattern-to-match-url-with-or-without-http-www
http://stackoverflow.com/questions/6427530/regular-expression-pattern-to-match-url-with-or-without-http-www/

Cada URL de Internet válida tiene al menos un punto, por lo que el patrón anterior simplemente intentará encontrar al menos dos cadenas encadenadas por un punto y tiene caracteres válidos que la URL pueda tener.

Puede usar un signo de interrogación después de una expresión regular para hacerla condicional, por lo que querrá usar:

http://(www.)?

Eso coincidirá con cualquier cosa que tenga http: // www. o http: // (sin www.)

Puede usar un método de reemplazo para eliminar lo anterior, obteniendo así el dominio. Depende de para qué necesites el dominio.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *