Javascript Jquery-使用Jquery从文本中检测并获取url

Javascript Jquery-使用Jquery从文本中检测并获取url,javascript,jquery,Javascript,Jquery,我有textarea,我想检测用户何时完成键入或粘贴url。我想捕获该url并将其发送到php 我看过谷歌的很多解决方案,但它们似乎都在链接周围添加了锚定标签,我不想这样做 我尝试使用我在该网站的解决方案中找到的这个regexp,但它不起作用: /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/ 它的问题是,只要我键入类似于http://的内容,它就会自动只发送该字符串

我有textarea,我想检测用户何时完成
键入
粘贴
url。我想捕获该url并将其发送到php

我看过谷歌的很多解决方案,但它们似乎都在链接周围添加了锚定标签,我不想这样做

我尝试使用我在该网站的解决方案中找到的这个regexp,但它不起作用:

/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
它的问题是,只要我键入类似于http://的内容,它就会自动只发送该字符串

我不想用有限的TLD列表编写regexp。我可以用什么方式存档

代码如下:

$(document).ready(function() {
    $('#write-post-textarea').keyup(function() {    
        if(isUrl($(this).val())){
           //Show the url in an alert box
           alert($(this).val());
        }else{
           //do something if its not a url
        }
    });     
    function isUrl(s) {
        //var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
        return regexp.test(s);
    }    
});

我认为你的问题是,每当你按下一个键,它就会检查url一次。因此,只要您键入与它发送的regexp匹配的内容。您可以尝试设置如下计时器:

var timer;
$(document).ready(function() {
    $('#write-post-textarea').keyup(function() {
        var $this = $(this);
        clearTimeout(timer);
        setTimeout(function ()}
          if(isUrl($this.val())){
             //Show the url in an alert box
             alert($(this).val());
          }else{
             //do something if its not a url
          }
        }, 2000);
    });

    function isUrl(s) {
        //var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
        return regexp.test(s);
    }

});

这样,当您键入时计时器将被清除,并且仅在您停止时运行代码。

使用keyup事件和keycode验证,以确保在开始验证之前按下enter或space按钮

$("#write-post-textarea").keyup(function (e) {
    if (e.which == 13 || e.which == 32) { // 32 may be for space bar click
        if(isUrl($(this).val())){
          //Show the url in an alert box
          alert($(this).val());
        }else{
          //do something if its not a url
        }
     }
});

在验证url之前,尝试在keyup事件中添加与最后一个键匹配的代码作为空格或enter。