2012-02-20 44 views
0

對於初學者,我已經檢查了其他一些正則表達式線程,這不是經常問到的「如何使用正則表達式驗證URL」問題。使用括號和插入符號的正則表達式驗證URL

我正在檢查引用的URL是http還是https,並且「子域」包含'staging','www'或'search'。

^(https|http)://(staging|www|search).mysite.com 

(這個問題已經解決了,編輯後的新問題),我相信我有這個問題涉及相鄰開口插入符的括號。

任何想法?

此外,我會怎麼去允許.com部分之後的任何東西?出於某種原因,我可以在URL前面的字符爲例如2http://staging.mysite.com仍然可以工作,爲什麼?

編輯:我想我的瀏覽器可能已經緩存了原始正則表達式腳本,因爲原始問題現在已修復。

現在我唯一的問題是如何確保2http://staging.mysite.com不會驗證?我認爲插入符表示字符串必須以http或https開頭。

我做一個的preg_match,我想它只是檢查是否字符串包含上述要求,但不檢查,看它是否真正與HTTP或HTTPS開頭

+0

什麼是錯誤?括號是好的。 (和你的點是匹配的一切,但沒有什麼大不了的)。也嘗試逃避正斜線。 '\'' – sweaver2112 2012-02-20 22:54:34

+0

@ sweaver2112由於某些原因,即使URL實際上並未以http或https開頭,字符串也會在preg_match中進行驗證。也就是說,我可以在http之前添加任何內容,只要網址的其餘部分符合preg匹配,並且正則表達式將傳遞爲正確,即使它不正確。 – Eric 2012-02-20 23:02:29

+0

將字符串的開頭添加到您的模式中,如下所示:'^' – Basti 2012-02-20 23:04:10

回答

1
$string = "https://www.mysite.com/foo/bar"; 

preg_match("~^(https|http)://(staging|www|search)\.mysite.com~", $string, $matches); 

var_dump($matches); 

array 
    0 => string 'https://www.mysite.com' (length=22) 
    1 => string 'https' (length=5) 
    2 => string 'www' (length=3) 

的作品就像一個魅力。如果您不要求結束模式(使用$),則可以使用以下任意字符。 2http://不會工作,因爲我們需要使用^(https | http)開頭的字符串。

+0

您已經得到了它,非常感謝您的好先生!我將不得不查找正則表達式爲什麼以〜開頭和結尾,但是感謝您的時間和幫助。 – Eric 2012-02-20 23:10:58

+0

那是任意的。如果你喜歡,你可以使用斜槓。如果你這樣做,你將不得不在你的模式中跳過斜槓:'preg_match(「/ ^(https | http):\/\ /(staging | www | search)\。mysite.com/」,$ string,$匹配);' – Basti 2012-02-20 23:17:35