2011-01-10 7 views
122

Estoy tratando de establecer una expresión regular que verifique el inicio de una cadena, y si contiene http:// o https:// debe coincidir con ella.Regex para probar si la cadena comienza con http: // o https: //

¿Cómo puedo hacer eso? Estoy tratando los siguientes, que no está funcionando:

^[(http)(https)]:// 
+5

Si usted está comprobando sólo el comienzo de la cadena, es probablemente más rápido simplemente hacer una comparación directa de los primeros caracteres de la cuerda con los patrones que está buscando. – templatetypedef

+2

Está creando un * grupo de caracteres * con '[]'. Hará ** un ** carácter que sea '(', ')', 'h',' t', 't',' p' o 's'. Es decir. coincidiría con 's: //' pero no con 'ht: //' o 'x: //'. –

+2

@templatetypedef: Creo que percibo una optimización prematura. – cdhowie

Respuesta

232

La utilización del [] es incorrecto - en cuenta que denota una clase []carácter y por lo tanto solamente siempre que coincida con un carácter. La expresión [(http)(https)] se traduce como "coincide con un (, un h, un t, un t, un p, un ), o un s." (Caracteres duplicados se ignoran.)

Prueba esto:

^https?:// 

Si realmente desea utilizar la alternancia, utilice esta sintaxis en su lugar:

^(http|https):// 
+0

Como cadena de entrada de PHP: $ regex = '/^(https?: \/\ /) '; –

+5

Steve, creo que te perdiste un/al final: $ regex = '/^(https?: \/\ /) /'; – Axi

+3

En caso de que alguna tuerca accidentalmente supere el http, $ regex = '/^(https?: \/\ /)/I'; – jeffkee

21
^https?:// 

puede que tenga que escapar de la sin embargo, las barras inclinadas, dependiendo del contexto.

12

Esto debería funcionar

^(http|https):// 
21

Caso insensible:

var re = new RegExp("^(http|https)://", "i"); 
var str = "My String"; 
var match = re.test(str); 
2

^https?:\/\/(.*) donde (.*) es igualar todo lo demás después de https://

Cuestiones relacionadas