我有一个jQuery函数,可以在有人打字时检查textarea是否为“有效”网址。
$(".url2").keyup(validNum).blur(validNum);
function validNum() {
var initVal = $(this).val();
outputVal = initVal.replace(/(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])$/,"replace this link by bla..");
if (initVal != outputVal) {
$(this).val(outputVal);
}}
});
问题是,只要输入“http://www.ab”而不是等到空格被按下,功能就已经替换了url(完成url,waitig为空格,替换为此函数)。我希望实现,人们可以在替换之前输入像http://www.example.org/site?id=1&etcetc这样的整个网址。所以我认为“空间”是启动该功能的触发器。有人可以帮助我或有人有更好的主意吗?
非常感谢
wordi
答案 0 :(得分:0)
我认为如果你只是改变你的正则表达式,你就会得到你想要的东西
/(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])(\s){1}$/
答案 1 :(得分:0)
如果您想要空格或空格字符来触发验证,请使用:
$(".url2").keyup(validateOnWhiteSpace).blur(validNum);
function validateOnWhiteSpace() {
if(event.keyCode == 9 || event.keyCode == 13 || event.keyCode == 32) {
validNum.call(this, arguments);
}
}
function validNum() {
var initVal = $(this).val();
outputVal = initVal.replace(/(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])$/,"replace this link by bla..");
if (initVal != outputVal) {
$(this).val(outputVal);
}}
});
答案 2 :(得分:0)
我还不能评论第一个帖子,但回答你关于PHP regexp在jQuery中不起作用的问题,这是因为你在开头有^,在结尾有$。 ^匹配字符串的开头,$匹配字符串的结尾。取出它将允许正则表达式在字符串中的任何点匹配。
示例:
^ ABC \ d $
将匹配:
“ABC1”
不匹配:
“Zabc1”
由于“a”不是字符串的第一个字符。
答案 3 :(得分:0)
$(".url2").onchange(validNum).blur(validNum);
function validNum() {
var initVal = $(this).val();
outputVal = initVal.replace(/(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])$/,"replace this link by bla..");
if (initVal != outputVal) {
$(this).val(outputVal);
}
}