【问题标题】:Javascript for replacing an abreviation by his equivalent用他的等价物替换缩写的Javascript
【发布时间】:2012-10-20 16:22:24
【问题描述】:

我在使用 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;        
    }

});

其实这行不通,问题是我没有明显的错误 在 javascript 的控制台中。

我们将不胜感激任何帮助。

亲切的问候。

SP。

【问题讨论】:

  • 您可以使用 firebug 等工具调试您的 javascript
  • 是的,我用过,但没有显示任何错误
  • console.log(code) :这不应该给你像 65 这样的'a'等键码吗?它不会进入条件内
  • @StanislasPiotrowski 我不是在谈论显示问题,而是在谈论调试。使用 firebug,您可以在代码中放置断点以查看每个变量的值,这可以帮助您了解为什么您的代码不起作用。

标签: javascript text replace onkeypress


【解决方案1】:

这应该可行:

$('#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

【讨论】:

  • 这只会改变文字“tel”,而不是如果它包含在像“this is my tel”这样的字符串中
  • 尊敬的先生,感谢您的回复我已经完成了一个 php 代码,它做了一段时间来替换所有单词。问题是它实际上添加了一个?在脚本结束时,此功能不起作用。我真不知道这在哪里?来自。有没有办法消除它?亲切的问候。? SP
  • 哦,谢谢,这段代码在小提琴上可以正常工作,但在我的页面中却不行,我是否在最后添加了这个 jQuery(function($){ 和 },但它仍然不起作用跨度>
  • @StanislasPiotrowski: jQuery((function(){}); 应该可以正常工作,以确保 $ 标志正常工作:jQuery((function($){return function(){/* your code here*/};}(jQuery)); 是您所追求的。请注意,此答案会将 visit Tel-Aviv 更改为 visit telephone-Aviv。我已将答案更新为稍微复杂但更灵活的解决方案
【解决方案2】:

当使用keyup() 时,事件处理程序只返回被按下键的键码。例如 x 的结果是 e = 88。

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

【讨论】:

  • 所以没有办法替换按键上的字符串?
  • 当然有,但主要问题是代码永远不会执行该命令,因为code 永远不会是字符串。使用str.replace 进行替换。
  • 不要在处理程序中使用$('#tags'),使用$(this).val()$(this)[0].valuethis.value。使用 jQuery 选择器会扫描 DOM,这会更慢而且完全没有必要,因为你有一个对元素的引用:this
【解决方案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');
});

这是未经测试的,很可能需要更多的工作,但是据我所知,你想用telephone替换所有出现的tel。我使用的表达式/\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;
});

输入:我需要电话,快 ==> 我需要电话,快
我需要电话 == > 我需要一个电话(如果用户仍在打字,不要替换,他可能正在输入望远镜,在提交或模糊时替换)
我想预订旅馆今晚 ==> 我想预订今晚的旅馆
参观特拉维夫 ==> 参观特拉维夫 em>

【讨论】:

    【解决方案4】:

    当以这种方式使用按键时,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);        
        }
    
    });
    

    【讨论】:

    • 这只会一遍又一遍地替换第一次出现的tel。如果您输入tel and bell,结果将类似于telephonetelephonetelephonetelephonetelephonetelephonetelephonetelephonetelephonetelephonetelephonetelephonetelephonetelephonetelephoneephone and bell
    • 我知道这会改变“tel”的每个实例,所以“hostel”将变成“hostelephone”。当使用正则表达式时替换(/\stel\s|^tel\s|\stel$ /i, 'telephone') 这将被修复.. ;) .. 多亏了 Elias,我自己才学到了一些东西(正则表达式中的 \b ):)
    • 我不会在我的表达中使用tel$,就像我在回答中所说的那样:客户端将无法输入I want to by a television,因为在某些时候,输入将是@987654331 @ --> 匹配 \stel$ 并将被替换
    【解决方案5】:

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

    例如:

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

    【讨论】:

      猜你喜欢
      • 2021-05-16
      • 2016-08-30
      • 2015-09-27
      • 1970-01-01
      • 1970-01-01
      • 2014-02-27
      • 2013-08-25
      • 1970-01-01
      • 2019-11-26
      相关资源
      最近更新 更多