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


jQuery replace function (trigger needed)

我得到了一个jQuery函数,可以在有人打字时检查文本区域的"有效"URL。

$(".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,等待空格,用这个函数替换)。我想实现的是,人们可以键入一个完整的urlhttp://www.example.org/site?id=1&等等。所以我认为"空间"是启动函数的触发器。有人能帮我,或者有人有更好的主意吗?

非常感谢

wordi

如果您希望空格或空白字符触发验证,请使用以下方法:

  $(".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);
    }}
});

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

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

这里有一个jsfiddle,它似乎可以工作

我还不能评论第一个线程,但要回答您关于PHP正则表达式在jQuery中不起作用的问题,是因为开头有^,结尾有$。^与字符串的开头匹配,$与字符串的结尾匹配。去掉它将允许regexp在字符串中的任何点进行匹配。

示例:

^abc''d$

将匹配:

"abc1"

不匹配:

"Zabc1"

因为"a"不是字符串的第一个字符。

$(".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);
    }
}