2015-06-11 44 views
0

我有以下的代碼來驗證,如果一個人在文本框中輸入一個「有效」網址:這個javascript url驗證器爲什麼失敗?

function validateURL(textval) { 
var urlregex = new RegExp(
    "^(http:\/\/www.|https:\/\/www.|ftp:\/\/www.|www.){1}([0-9A-Za-z]+\.)"); 
return urlregex.test(textval); 

}

用戶越來越哪裏,這是返回什麼似乎是一個虛假的錯誤有效的URL

http://a.website.com/issues/i#browse/TEST-111 

有人可以確認爲什麼這個例子不會通過「有效的網址」測試?

+0

爲什麼要求一個URL有'www'的呢? – Quentin

+1

@DenysSéguret - 是的,你可以。它啓動片段標識符。 – Quentin

+0

你究竟想在URL中匹配/驗證什麼?只有起始部分,直到'/ issues'? –

回答

1

有人可以確認爲什麼這個例子不會通過「有效的網址」測試?

與正則表達式的主要問題在於,www.部是在圖案強制性

如果你想使它可選,使用?修飾符((?:www\.)?)周圍的一組:

^(?:(?:(?:ftp|https?):\/\/)?)(?:www\.)?[0-9A-Za-z]+(?:\.[0-9A-Za-z]+)* 

這將匹配http://a.website.com一部分。爲了匹配整個字符串,你可以使用:

^(?:(?:(?:ftp|https?):\/\/)?)(www\.)?[0-9A-Za-z]+(?:\.[0-9A-Za-z]+)*(?:\/[^\/]*)*$ 

demo

var re = /^(?:(?:(?:ftp|https?):\/\/)?)(www\.)?[0-9A-Za-z]+(?:\.[0-9A-Za-z]+)*(?:\/[^\/]*)*$/; 
 
var str = 'http://a.website.com/issues/i#browse/TEST-111'; 
 
    
 
if ((m = re.exec(str)) !== null) { 
 
    document.getElementById("res").innerHTML = m[0]; 
 
}
<div id="res"/>

+0

請檢查並讓我知道它是否適合你。 –

0

您的正則表達式要求主機名部分以www.開頭(這通常不是URL的要求)。您正在測試的網址不包括www.


還有許多其他原因,正則表達式被打破(你不考過去的第一個字符www.後,你試圖這樣做禁止被允許在URL中的字符等),但,這就是爲什麼您擁有的網址未通過。