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