【发布时间】:2011-07-13 02:02:21
【问题描述】:
我正在尝试使用 RegEX 来匹配 URL 模式。我在这里找到了答案: Check if a Javascript string is a 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/
添加评论 agent-j 建议的修复至少消除了无效量词问题。 赞一个
但是,如果正确完成,它不喜欢上面的示例网址:
http://localhost:1987/
问题出在端口上。当我删除端口号时,它喜欢 localhost。
【问题讨论】:
-
您需要解决的一件事是,当您从这样的字符串形成正则表达式时,您需要引用的内容与形成带有正则表达式文字语法的正则表达式。具体来说,您不需要在“/”字符之前使用“\”,但您确实需要在“d”或“ ?”。
-
另外,错误的行号可能并不有趣,因为在调用“RegExp()”函数并解析表达式之前,不会检测到实际错误。事实上,问题可能不在于正则表达式的最后一部分。
-
@Pointy,关于错误位置没有给出正确位置的非常好的观点。
标签: javascript regex