charsets替换问题

这个问题在这里已经有了答案:

  • 如何在JavaScript中替换所有出现的字符串? 41个答案

  • 默认情况下, replace只会替换第一个匹配项。 要替换所有匹配项,请使用带g标志的正则表达式:

    function en2fa(str){
        string = string.replace(/1/g, '۱');
        string = string.replace(/2/g, '۲');
        // ...
        return string;
    }
    
    var a = '12345';
    alert(en2fa(a.replace(/1/g, '3')));
    

    您可以使用查找表使译文更加简洁:

    var en2faDict = {};
    var fa2enDict = {};
    "۰۱۲۳۴۵۶۷۸۹".split('').forEach(function(fa, en) {
        en = "" + en;
        en2faDict[en] = fa;
        fa2enDict[fa] = en;
    });
    
    function translate(str, dict, pattern) {
        return str.replace(pattern, function(c) { return dict[c]; });
    }
    
    function fa2en(str) {
        return translate(str, fa2enDict, /[۰-۹]/g);
    }
    
    function en2fa(str) {
        return translate(str, en2faDict, /[0-9]/g);
    }
    

    这是一个在某些浏览器中可能更快的版本。 它使用for循环和范围检查,这依赖于数字是连续的:

    var en2faDict = {};
    var fa2enDict = {};
    "۰۱۲۳۴۵۶۷۸۹".split('').forEach(function(fa, en) {
        en = "" + en;
        en2faDict[en] = fa;
        fa2enDict[fa] = en;
    });
    en2faDict.low = '0'.charCodeAt(0);
    en2faDict.high = '9'.charCodeAt(0);
    fa2enDict.low = en2faDict['0'].charCodeAt(0);
    fa2enDict.high = en2faDict['9'].charCodeAt(0);
    
    function translate(str, dict) {
        var i, l = str.length, result = "";
        for (i = 0; i < l; i++) {
            if (str.charCodeAt(i) >= dict.low && str.charCodeAt(i) <= dict.high)
                result += dict[str[i]];
            else
                result += str[i];
        }
        return result;
    }
    
    function fa2en(str) {
        return translate(str, fa2enDict);
    }
    
    function en2fa(str) {
        return translate(str, en2faDict);
    }
    

    从你的问题的线索,你的问题是在你正在做替换的方式。 你向我们展示了fa2en ,我认为你的en2fa是相似的。 然而,更好的工作实施如下:

      function en2fa (str) {
        return str.replace (/d/g, function (d) {
          return '۰۱۲۳۴۵۶۷۸۹'.charAt (+d);
        });
      }
    

    您的主要问题是由您的代码中的@tom所描述的,使用字符串替换仅替换第一次出现。 @tom的答案虽然可能有效,但并不标准。 要替换所有发生的事情,您应该使用regExp替换g修饰符。 这也会导致代码的显着缩短!

    链接地址: http://www.djcxy.com/p/16845.html

    上一篇: charsets replacements issue

    下一篇: Javascript character replace all