Duda expresión regular con url

  • Autor Autor Steeep
  • Fecha de inicio Fecha de inicio
Steeep

Steeep

Delta
Social Media
Buenas dando vuelta me pille con una expresión regular que quiero adaptar a mi gusto para algo.

Tengo el siguiente código:

PHP:
$url = 'http://forobeta.com/';

if(preg_match('/((?:http|https)(?::\\/{2}[\\w]+)(?:[\\/|\\.]?)(?:[^\\s"]*))/is', $url)) {
	echo "URL";
}
else {
	echo "No URL";
}

Y lo que pasa es que si en la variable $url pongo http://forobe me lo sigue tomando como que es un URL completa.

Pero lo que necesito es que escriba una URL completa & no hasta la mitad, o sea que cumpla todas la condiciones juntas.

Como lo puedo hacer? Alguna ayuda?

Saludos, gracias de antemano.
 
prueba con

PHP:
preg_match('/^(http|https)://([A-Z0-9][A-Z0-9_-]*(?:.[A-Z0-9][A-Z0-9_-]*)+):?(d+)?/?/i', $url)
 
Prueba con este:
PHP:
$url = 'http://forobeta.com/';
if(preg_match("/^(http:\/\/|https:\/\/)?(www\.)?[a-z0-9]+[a-z0-9-]*\.(com|net|org|info)/i", $url)){
	echo "Url correcta: " . $url;
}else {
	echo "url incorrecta: " . $url;
}

Claro que seria con las extenciones que tiene ahi (.com, .net, .org, .info) seria cuestion de agregarle las que quieras que acepte 😀

Y por cierto alguien sabe que significa ?: o ?= ?

Saludos!!
 
Última edición:
PHP:
if( filter_var($url, FILTER_VALIDATE_URL) ) {
    echo 'URL';
} else {
    echo 'No url';
}
 
Prueba con este:
PHP:
$url = 'http://forobeta.com/';
if(preg_match("/^(http:\/\/|https:\/\/)?(www\.)?[a-z0-9]+[a-z0-9-]*\.(com|net|org|info)/i", $url)){
	echo "Url correcta: " . $url;
}else {
	echo "url incorrecta: " . $url;
}

Claro que seria con las extenciones que tiene ahi (.com, .net, .org, .info) seria cuestion de agregarle las que quieras que acepte 😀

Y por cierto alguien sabe que significa ?: o ?= ?

Saludos!!

En las expresiones regulares cuando pones algo entre parentesis quiere decir que queres capturar lo que matchea con esa seccion en un grupo.
Por ejemplo (\w+) esto va a matchear todo lo que sea letras mas de una vez y lo va a guardar en un grupo.
El operador ?: sirve para indicar que no queres guardar ese grupo.
Por ejemplo (?:\w+) va a matchear lo mismo que el ejemplo anterior pero no va a guardar el grupo. En este ejemplo no tiene mucho sentido usarlo asi, si no queres guardar el grupo no pones los parentesis y listo, pero lo de armar grupos y no guardarlos sirve para cuando queres usar un OR o poner que algo es opcional.
Por ejemplo (?:div|span) eso va a matchear contra div o contra span y no va a guardar el grupo.
Tambien puede ser para indicar que algo puede estar o no de esta forma (?:div)? ahi estas indicando que toda la palabra div puede estar o no y no guardas el grupo.
 
En las expresiones regulares cuando pones algo entre parentesis quiere decir que queres capturar lo que matchea con esa seccion en un grupo.
Por ejemplo (\w+) esto va a matchear todo lo que sea letras mas de una vez y lo va a guardar en un grupo.
El operador ?: sirve para indicar que no queres guardar ese grupo.
Por ejemplo (?:\w+) va a matchear lo mismo que el ejemplo anterior pero no va a guardar el grupo. En este ejemplo no tiene mucho sentido usarlo asi, si no queres guardar el grupo no pones los parentesis y listo, pero lo de armar grupos y no guardarlos sirve para cuando queres usar un OR o poner que algo es opcional.
Por ejemplo (?:div|span) eso va a matchear contra div o contra span y no va a guardar el grupo.
Tambien puede ser para indicar que algo puede estar o no de esta forma (?:div)? ahi estas indicando que toda la palabra div puede estar o no y no guardas el grupo.

Si, ya estuve leyendo algo de eso (que ocupaba usar expresiones regulares y nunca las habia usado :topsy_turvy🙂, Gracias :encouragement:

Saludos!!
 
Atrás
Arriba