Javascript用他的等价替换abreviation

时间:2012-10-31 08:40:48

标签: javascript text replace onkeypress

我遇到了一些javascript问题。

事实上,我在我的数据库中有许多记录,这些记录是缩写和等效的,

例如,替换tel =>电话等...

所以我有这个功能

$('#tags').keyup(function(e){
    var code = e.which ? e.which : e.keyCode;
     console.log(code);
    if (code == 'tel'){
        var input = this.value;
        input = input.substr(0, input.length -1);
        console.log(input);
        input += 'tel';
        this.value = input;        
    }

});

Actualy这不起作用的麻烦是我没有aby错误 在javascript的控制台中。

非常感谢任何帮助。

亲切的问候。

SP。

5 个答案:

答案 0 :(得分:7)

这应该有效:

$('#tags').keyup(function(e){
    var code = e.which ? e.which : e.keyCode;
    var input = this.value;
    if (input.indexOf('tel') != -1) {
       this.value = this.value.replace(/\btel\b/gi,'telephone');

    }

});

这是fiddle

答案 1 :(得分:3)

使用keyup()时,事件处理程序仅返回按下的键的键代码。例如,x导致e = 88。

使用$("#tags").val()获取输入元素的值。

答案 2 :(得分:3)

keyCodewhich属性不返回字符串,甚至不返回单个字符。它返回密钥代码,表示客户端发出的密钥。如果您想获得相应的字符:String.fromCharCode(e.which || e.keyCode);
例如,如果用户点击a键,则键码将为97String.fromCharCode(97)返回a

如果您想了解天气,元素的当前值包含缩减:tel,您需要做的是:

$('#tags').keyup(function(e)
{
    this.value = this.value.replace(/\btel\b/gi,'telephone');
});

这是未经测试且很可能需要更多工作,但AFAIK,您希望将所有tel替换为telephone。我使用/\btel\b/的表达式替换了所有子串tel,前提是它们前面跟着一个单词边界(以避免替换单词的一部分)。
不是字符串和短划线的结尾也被认为是字边界。如果我想输入television,我最终会输入telephoneevision。为避免这种情况,您需要稍微复杂的表达式。 here's an example如何避免JS将短划线视为边界,只是考虑将字符串结尾考虑在内

更新

也许这个表达并不像我想象的那么容易,所以这就是我建议你使用的:

this.value = this.value.replace(/(?:(\-?\b))tel(?:(\b\-?.))/gi,function(all,b1,b2)
{
    if (b1 === '-' || b2.charAt(0) === '-')
    {//dash, don't replace
        return all;
    }//replace
    return b1 + 'telephone' + b2;
});

输入:我需要一个电话,快速 ==> 我需要一部电话,快速
我需要一个电话 ==> 我需要一个电话(如果用户仍在打字,不要更换,他可能会输入望远镜,更换提交或模糊)
我想今晚预订宿舍 ==> 我想今晚预订宿舍
访问特拉维夫 ==> 访问特拉维夫

答案 3 :(得分:1)

以这种方式使用按键时,code变量将包含按下的字符的字符代码。不像预期的'tel'那样的字符串。您可以使用onkeyup / onchange事件并检查输入元素的val()并使用replace()将缩写更改为预期的字符串。

$('#tags').keyup(function(e){

    var elem = $(this);
        var input = elem.val();

        // input = input.substr(0, input.length -1);  // This might not be necessary
        console.log(input);

        // do the replacement
        input = input.replace('tel','telephone');

        elem.val(input);        
    }

});

答案 4 :(得分:0)

使用replace方法替换字符串中的单词。

例如:

var str = "This is AIR";
var newstr = str.replace("AIR", "All India Radio");
console.log(newstr);