2011-12-20 45 views
1

我用下面的正則表達式驗證一個URL,JavaScript的jQuery的正則表達式驗證一個URL

jQuery.validator.addMethod("url_validation", function (value, element) { 
return this.optional(element) || /^(([http|https|HTTPS|HTTP]+:\/\/))?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)[email protected])?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/i.test(value); 
}, "error"); 

此正則表達式工作正常。但是,當我驗證http://www.alfaromeo.com/com/#/home時,它說該網址無效。當我啓用#時,正則表達式無法驗證一些驗證。所以,任何人都可以給出一個建議,修改這個正則表達式來驗證#,這是在一個URL內。

我認爲regular expressions how to validate a URL得到這個正則表達式。

Thanx。

回答

0
^(([http|https|HTTPS|HTTP]+:\/\/))?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)[email protected])?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([#-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$ 

我改變

(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*) 

(\/([#-+_~.\d\w]|%[a-fA-f\d]{2,2})*) 

即使這樣,不要指望它在每一個URL工作,你可以扔掉它......

+0

我偷了這個,並且它在查詢字符串中以逗號(,)打破。 – user1003221 2012-05-17 23:20:02

+0

正如我所說,它很可能不適用於每個可能的URL。在我的回答中,我剛剛修改了正則表達式來處理OP提供的URL。 – civilu 2012-07-09 12:25:55