我正在嘗試使用RegEX來匹配URL模式。我在這裏找到了答案: Check if a Javascript string is a url使用RegEX匹配URL模式,無效量詞?
其中指出我在這裏: http://forums.devshed.com/javascript-development-115/regexp-to-match-url-pattern-493764.html
這給了我下面的代碼(剪切和devshed粘貼到這裏和我的腳本):
function ValidURL(str) {
var pattern = new RegExp('^(https?:\/\/)?'+ // protocol
'((([a-z\d]([a-z\d-]*[a-z\d])*)\.)+[a-z]{2,}|'+ // domain name
'((\d{1,3}\.){3}\d{1,3}))'+ // OR ip (v4) address
'(\:\d+)?(\/[-a-z\d%_.~+]*)*'+ // port and path
'(\?[;&a-z\d%_.~+=-]*)?'+ // query string
'(\#[-a-z\d_]*)?$','i'); // fragment locater
if(!pattern.test(str)) {
alert("Please enter a valid URL.");
return false;
} else {
return true;
}
}
當我嘗試在Firefox 4.0中使用它時,Firebug 1.7.3在以下位置給出了無效的量詞錯誤:
'(\#[-a-z\d_]*)?$','i'); // fragment locater
有沒有人有什麼問題的想法?
從無效量詞的其他搜索,我相信*是一個問題,但不知道它可能是什麼。在我使用時,它給我的錯誤的函數問題的字符串是:
htp://localhost:1987/
添加的註釋 通過代理-J建議的修復至少去除無效量詞問題。 豎起大拇指
但是,它不喜歡的時候做正確上面的示例網址:
http://localhost:1987/
的問題是與端口。當我刪除端口#時,它喜歡localhost。
的事情之一你需要解決的是,當你從這樣的字符串形成正則表達式時,你需要引用的東西是*不同* t韓,當你用正則表達式語法形成正則表達式。具體來說,在你的「/」字符之前你不需要「\」,但是你需要在諸如「d」或「?」之前加「*」字符。 – Pointy
此外,錯誤的行號可能不是有趣的,因爲在調用「RegExp()」函數並解析表達式之前,不會檢測到實際錯誤。事實上,這個問題可能不是正則表達式的最後一部分。 – Pointy
@Pointy,關於錯誤位置沒有給出正確位置的很好的一點。 –