2011-01-10 44 views
122

我試圖設置一個正則表達式來檢查字符串的開始,如果它包含http://https://它應該匹配它。正則表達式來測試字符串是以http://開頭還是https://

我該怎麼做?我想這是不工作的情況如下:

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

如果您正在檢查的字符串剛開始後符合一切,它可能更快的做法是直接比較字符串的前幾個字符與您正在查找的模式。 – templatetypedef

+2

您正在用'[]'創建*字符組*。它將會加上一個**字符,它可以是'(',')','h','t','t','p'或's'。即它會匹配's://'但不匹配'ht://'或'x://'。 –

+2

@templatetypedef:我想我感覺一些不成熟的優化。 – cdhowie

回答

232

您使用的[]是不正確 - 請注意,[]表示字符類因此將僅匹配一個字符。表達式[(http)(https)]翻譯爲「匹配(,h,t,t,p,)s」。 (重複的字符將被忽略。)

試試這個:

^https?:// 

如果你真的想用交替,使用語法來代替:

^(http|https):// 
+0

作爲PHP輸入字符串:$ regex ='/^(?HTTPS:\/\ /)'; –

+5

史蒂夫,我想你錯過了/最後:$ regex ='/ ^(https?:\/\ /)/'; – Axi

+3

爲了防止某些螺母意外地大寫了http,$ regex ='/ ^(https?:\/\ /)/ i'; – jeffkee

21
^https?:// 

您可能逃脫根據上下文,雖然是正斜槓。

12

這應該工作

^(http|https):// 
21

不區分大小寫:

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

^https?:\/\/(.*)其中(.*)https://

相關問題