2012-12-21 126 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

那么你只是在复制我的答案呢? –