Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 输入不连续时将字符串转换为整数_Javascript_Regex_String_Int_Special Characters - Fatal编程技术网

Javascript 输入不连续时将字符串转换为整数

Javascript 输入不连续时将字符串转换为整数,javascript,regex,string,int,special-characters,Javascript,Regex,String,Int,Special Characters,我有一个将输入字符串(阿拉伯数字)转换为int值的函数。我使用以下函数来实现这一点 function convertToEnglishDigit(input) { var numberMap = { '۰': '0', '۱': '1', '۲': '2', '۳': '3', '۴': '4', '۵': '5', '۶': '6', '۷': '7',

我有一个将输入字符串(阿拉伯数字)转换为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
,为什么会这样?我如何解释它们无序的情况,在我的用例中,几乎总是如此。

无论出于什么原因,正则表达式被这些文字字符弄糊涂了。您可以使用这些数字的十六进制代码使其工作:

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;
}

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

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);
}

这应该会帮助你这些角色对Firebug来说真的很混乱:)好的发现!我想知道我是否需要映射对象中的值。似乎在替换中使用数字字符串和十六进制代码就足够了。你知道我如何用这种方法处理浮点数吗?@Stavros_这取决于符号。如果它与西方符号类似,只是小数点等的字符不同,那么过程几乎相同。我尝试将
'\u066B':'.
添加到数字映射中,并将
parseInt()
更改为
parseFloat()
但我收到一个错误,声明“input.replace不是函数”@Stavros\u,这意味着您没有向函数传递字符串。
convertToEnglishDigit('۰۱۲۹')
129
convertToEnglishDigit('۰۸۹۲۳۴')
89234
convertToEnglishDigit('۶۱۹۰')
6190
convertToEnglishDigit('۲۱۰')
210