Javascript 输入不连续时将字符串转换为整数
我有一个将输入字符串(阿拉伯数字)转换为int值的函数。我使用以下函数来实现这一点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',
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