使用RegEX匹配URL模式,无效量词?

时间:2011-07-12 15:43:15

标签: javascript regex

我正在尝试使用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。

2 个答案:

答案 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%_.~+=-]*)?'