2014-02-05 71 views
0

我使用下面的代碼來驗證網址:jQuery驗證URL驗證進入無限循環

var urlregex = new RegExp(
    "^(http|https|ftp)\://([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&%\$\-]+)*@)*((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\?\'\\\+&%\$#\=~_\-]+))*$"); 
if (true === urlregex.test(textval.trim())) { 
    return true; 
} 
return false 

時,我給出了一個長URL(超過200個字符),那麼它會在無限循環並帶走了我的網絡與給消息頁面「下頁已經變得沒有反應,你可以等待,直到它變得敏感或殺死」

+0

它根本沒有連接到jQuery。這是關於純JS的。 – smnbbrv

+0

謝謝:)刪除了jQuery標記 –

+0

'&'裏面的字符類?它看起來很腥。 – nhahtdh

回答

1

此:

if (condition === true) { 
    return true; 
} else { 
    return false; 
} 

是一個反模式。使用的不是滾動您自己的URL匹配的正則表達式

return (condition === true); 

除此之外,使用a tried-and-tested one

var urlregex = /\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»「」‘’]))/i; 
+0

這是在這裏測試的正則表達式之一:http://mathiasbynens.be/demo/url-regex – nhahtdh