2012-12-21 87 views
0

我正在使用正則表達式來嘗試和驗證URL的。正則表達式我工作得很好,但唯一的問題是,它驗證URL的,即使前面沒有http://。我想,如果URL中的前面有http://(即使它不包含之後立即WWW)正則表達式:在此表達式的前面需要「http://」

這是我使用正則表達式它只驗證:

((https?)\:\/\/)?([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)[email protected])?([a-z0-9-.]*)\.([a-z]{2,3})(\:[0-9]{2,5})?(\/([a-z0-9+\$_-]\.?)+)*\/?(\?[a-z+&\$_.-][a-z0-9;:@&%=+\/\$_.-]*)?(#[a-z_.-][a-z0-9+\$_.-]*)? 
+0

自己不驗證的URL。無論你在寫什麼語言,無疑都有已經被編寫,測試和調試的代碼。你在用什麼語言? –

+0

PHP,我已經使用了'filter_var('http://example.com',FILTER_VALIDATE_URL)',但它驗證了諸如「http:// example.c」和「http:// example.comxx」這樣的URL不驗證。你會建議什麼原生的PHP函數? – Xecure

+0

你爲什麼認爲這兩個不應該驗證? –

回答

4

刪除第二?從左側。它用作量化器,使整個http部分可選。

+0

謝謝!對於懶惰:這是我使用的正則表達式:'((https?)\:\/\ /)([a-z0-9 +!*(),;?&= \ $ _.-- + (\:[!?A-Z0-9 + *();&= \ $ _.-] +)?@)([AZ 0-9 - ] *)\([AZ ] {2,3})(\:??[0-9] {2,5-})(\ /([A-Z0-9 + \ $ _-] \)?+)* \ /(\ ?[A-Z + \ $ _.-] [一個-z0-9;:@&%= + \/\ $ _.-] *)(#[A-Z _.-] [A- z0-9 + \ $ _.-- *)?' – Xecure

0

是否只是(s)可選的工作?

(http(s)?\:\/\/)?([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)[email protected])?([a-z0-9-.]*)\.([a-z]{2,3})(\:[0-9]{2,5})?(\/([a-z0-9+\$_-]\.?)+)*\/?(\?[a-z+&\$_.-][a-z0-9;:@&%=+\/\$_.-]*)?(#[a-z_.-][a-z0-9+\$_.-]*)? 

看到新的答案後,這將需要HTTP或HTTPS:

(http(s)?\:\/\/)([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)[email protected])?([a-z0-9-.]*)\.([a-z]{2,3})(\:[0-9]{2,5})?(\/([a-z0-9+\$_-]\.?)+)*\/?(\?[a-z+&\$_.-][a-z0-9;:@&%=+\/\$_.-]*)?(#[a-z_.-][a-z0-9+\$_.-]*)? 
+0

那麼你只是在複製我的答案呢? –