1

英語の数値文字をペルシア語に変更する機能があります。

  function en2fa(str){
    string = str.replace('1', '۱');
    string = string.replace('2', '۲');
    string = string.replace('3', '۳');
    string = string.replace('4', '۴');
    string = string.replace('5', '۵');
    string = string.replace('6', '۶');
    string = string.replace('7', '۷');
    string = string.replace('8', '۸');
    string = string.replace('9', '۹');
    string = string.replace('0', '۰');

    return string;
  }

そして、jsがどのように機能するかを知りたいのですが、詳細は次のとおりです。

var a = '12345';
alert(en2fa(a.replace('1', '3')));

私はこれを与えます:

۳۲3۴۵

なんで?js はこのテキストをどのように解析しますか?

============

編集済み:関数コードに誤りがあります。en2fa()編集しました。

4

2 に答える 2

2

デフォルトで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);
}
于 2013-06-16T12:41:57.507 に答える