2011-01-10 10 views
122

Sto cercando di impostare un'espressione regolare che controllerà l'inizio di una stringa, e se contiene uno o http://https:// dovrebbe corrispondere esso.Regex per verificare se la stringa inizia con http: // o https: //

Come posso farlo? Sto cercando la seguente che non sta funzionando:

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

Se stai controllando solo l'inizio della stringa, è probabilmente più veloce per fare un semplice confronto dei primi caratteri della stringa con i modelli che stai cercando. – templatetypedef

+2

Si sta creando un * gruppo di caratteri * con '[]'. Sarà mach ** un ** carattere che è o '(', ')', 'h',' t', 't',' p' o 's'. Cioè corrisponderebbe a 's: //' ma non 'ht: //' o 'x: //'. –

+2

@templatetypedef: Penso di percepire un'ottimizzazione prematura. – cdhowie

risposta

232

L'utilizzo del [] è corretto - notare che [] denota una classe di carattere e sarà quindi sempre e solo corrispondere a un carattere. L'espressione [(http)(https)] si traduce in "abbinare un (, un h, un t, un t, un p, un ), o un s". (Caratteri duplicati vengono ignorati.)

Prova questo:

^https?:// 

Se davvero si vuole utilizzare l'alternanza, utilizzare questa sintassi invece:

^(http|https):// 
+0

Come stringa di input PHP: $ regex = '/^(? https: \/\ /) '; –

+5

Steve, penso che tu abbia perso un/alla fine: $ regex = '/^(https?: \/\ /) /'; – Axi

+3

Nel caso in cui qualche dado superi inavvertitamente l'http, $ regex = '/^(https?: \/\ /)/I'; – jeffkee

21
^https?:// 

potrebbe essere necessario sfuggire alla barre inverse, a seconda del contesto.

12

Questo dovrebbe funzionare

^(http|https):// 
21

caso insensitive:

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

^https?:\/\/(.*) dove (.*) è abbinare tutto il resto dopo https://

Problemi correlati