jQuery - 检查输入内容是否包含keyup上的url

时间:2011-04-08 16:23:07

标签: javascript jquery regex event-handling

当用户手动输入内容,粘贴链接或两者的组合时,我试图检查输入是否包含URL。我想在第一次检测时获取网址的内容(类似于Facebook)。

到目前为止,我有以下内容:

$('#message').keyup(function() {

     var exp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/; 
     if((this.value.match(exp))) {

      var match = exp.exec(this.value);
        alert(match[0]);
        $(this).unbind();
        return;
     }
  });

  $("#message").bind('paste', function(e) { $("#message").trigger('keyup'); });

当粘贴链接,键入内容然后粘贴某些内容时,此功能正常,,但手动输入网址时

如果我输入" http://www.stackoverflow.com" ;,则在" http:// w"。

之后触发匹配

写这种行为的更聪明的方法是什么?

编辑:想到了什么 - 测试正则表达式与用户键入的最后一个在它之前和之后有空格的内容有什么关系呢?

谢谢,

1 个答案:

答案 0 :(得分:3)

虽然在“粘贴”上提取页面是一个不错的选择,但我真的不确定是否要在用户输入页面时获取页面。用户可能正在键入一个长URL,其中包含某些查询字符串参数,这些参数决定了要呈现的页面。理想情况下,您希望用户在开始发送HTTP请求之前完成整个输入,否则您将获取用户不想(或需要!)看到的各种中间页面。例如

www.facebook.com

显然会取回主页

www.facebook.com/britishpcrepairs

将获取Facebook上特定群组的页面,这可能是您的用户想要看到的内容。因此,实际上不需要获取主页,这会导致不必要的混淆。

我认为你应该

  1. 立即在“粘贴”
  2. 上抓取页面
  3. 在记录按键后未获取粘贴的情况下获取模糊页面 要么 在记录按键并且没有粘贴发生之后的一段时间(例如2秒)之后获取页面