我正在尝试使用RegEX来匹配网址格式。我在这里找到答案: Check if a Javascript string is a url
我指的是这里: http://forums.devshed.com/javascript-development-115/regexp-to-match-url-pattern-493764.html
这给了我以下代码(剪切并粘贴到此处和我的脚本中):
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/
添加评论 agent-j建议的修复至少删除了无效的量词问题。 竖起大拇指
但是,如果正确完成,它不喜欢上面的示例网址:
http://localhost:1987/
问题在于端口。当我删除端口#时,它喜欢localhost。
答案 0 :(得分:3)
我使用它,似乎工作正常:
var re = /^(http[s]?:\/\/){0,1}(www\.){0,1}[a-zA-Z0-9\.\-]+\.[a-zA-Z]{2,5}[\.]{0,1}/;
var isUrl = re.test(message);
答案 1 :(得分:0)
您需要在此处转义第一个\
:
'(\?[;&a-z\d%_.~+=-]*)?'
变为
'(\\?[;&a-z\d%_.~+=-]*)?'