jQuery替换函数(需要触发器)

时间:2011-06-24 17:31:39

标签: php jquery html regex

我有一个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

4 个答案:

答案 0 :(得分:0)

我认为如果你只是改变你的正则表达式,你就会得到你想要的东西

/(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])(\s){1}$/

Here is a jsfiddle that seems to work

答案 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);
    }
}