2015-05-25 89 views
1

我正在嘗試正則表達式來驗證Url。正則表達式錯誤匹配

var url = "https://www,google.com"; 
var urlRegex = /(https|http)?:\/\/(?:\w[\-\w.]+)(?:\/[\-\w+&@#\/%=~_|!:,.;]*)?(?:\?[\-A-Z0-9+&@#\/%=~_|!:,.;]*)?/i; 
var result = urlRegex.test(url); 

所以我得到「結果」爲true,但我應該得到false,因爲「url」包含逗號。 請幫忙。

回答

2

添加錨(^一個字符串的開始,$爲字符串的結尾):

^(https|http)?:\/\/(?:\w[\-\w.]+)(?:\/[\-\w+&@#\/%=~_|!:,.;]*)?(?:\?[\-A-Z0-9+&@#\/%=~_|!:,.;]*)?$ 
^                        ^

demo

+0

真棒。謝謝 – user3816152

+0

不客氣。如果您需要在較大的文本中查找URL,則需要在模式周圍使用'\ b',並在開頭添加負面預覽:'(?!\ S *,\ b)'。 –

2

因爲你的正則表達式匹配的部分,您也越來越真實。

使用^(https|http)?:\/\/(?:\w[\-\w.]+)(?:\/[\-\w+&@#\/%=~_|!:,.;]*)?(?:\?[\-A-Z0-9+&@#\/%=~_|!:,.;]*)?$

代替。