Javascript Jquery-使用Jquery从文本中检测并获取url
我有textarea,我想检测用户何时完成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://的内容,它就会自动只发送该字符串
键入
或粘贴
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。