当输入不是连续的时,将字符串转换为整数

时间:2016-12-01 19:52:03

标签: javascript regex string int special-characters

我有一个函数,我将输入字符串(阿拉伯数字)转换为int值。我使用以下功能执行此操作。

function convertToEnglishDigit(input) {
    var numberMap = {
        '۰': '0',
        '۱': '1',
        '۲': '2',
        '۳': '3',
        '۴': '4',
        '۵': '5',
        '۶': '6',
        '۷': '7',
        '۸': '8',
        '۹': '9',        
    };
    var result = parseInt(input.replace(/[۰-۹]/g, function(i) {
       return numberMap[i];
    }));

    return result;
} 

如果输入是单个字符,例如'۲',或者字符串是连续的,例如'۱۲۳۴۵',则它有效。如果输入是一串无序的字符,例如"٢١٠" replace()的返回值为NaN,为什么会这样,我如何解释其中的情况?它们出了故障,在我的用例中几乎总是如此。

2 个答案:

答案 0 :(得分:1)

无论出于何种原因,正则表达式都被那些文字字符弄得很困惑。您可以使用这些数字的十六进制代码使其工作:

function convertToEnglishDigit(input) {
    var numberMap = {
      '\u0660': '0',
      '\u0661': '1',
      '\u0662': '2',
      '\u0663': '3',
      '\u0664': '4',
      '\u0665': '5',
      '\u0666': '6',
      '\u0667': '7',
      '\u0668': '8',
      '\u0669': '9'        
    };
    var result = parseInt(input.replace(/[\u0660-\u0669]/g, function(i) {
       return numberMap[i];
    }));

    return result;
}

答案 1 :(得分:1)

你可以尝试这个,因为我不熟悉这个字母,但似乎给出了正确的输出。您可以修改代码以提高效率。

function convertToEnglishDigit(input){
 var digit =  ['۰','۱','۲','۳','۴','۵','۶','۷','۸','۹'];
 var store = '';
for(var i = 0; i < input.length; i++){
   for(var j = 0; j < 10; j++){
      if(input[i] === digit[j]) store +=j;
}
}
return parseInt(store);
}

输出

convertToEnglishDigit('۰۱۲۹')
129
convertToEnglishDigit('۰۸۹۲۳۴')
89234
convertToEnglishDigit('۶۱۹۰')
6190
convertToEnglishDigit('۲۱۰')
210