JavaScript无法将印地语/阿拉伯数字转换为实数数字变量

时间:2013-06-10 13:23:28

标签: javascript

我正在尝试使用来自外部源的DOM,并且在其中有一些印地文/阿拉伯语转录中的数值,如"۱۶۶۰",当我想将其转换为数值时,我得到NaN。 这有什么不对?

要尝试的小代码片段:

alert(Number("۱۶۶۰") + ' - ' + Number("1660"));

2 个答案:

答案 0 :(得分:43)

嗯,Number function确实期望数字0到9并且不处理阿拉伯数字。你需要自己照顾:

function parseArabic(str) {
    return Number( str.replace(/[٠١٢٣٤٥٦٧٨٩]/g, function(d) {
        return d.charCodeAt(0) - 1632; // Convert Arabic numbers
    }).replace(/[۰۱۲۳۴۵۶۷۸۹]/g, function(d) {
        return d.charCodeAt(0) - 1776; // Convert Persian numbers
    }) );
}

用法:

> parseArabic("۱۶۶۰")
1660

答案 1 :(得分:12)

我建议您在较低级别处理它:用相应的ASCII数字替换阿拉伯数字然后转换。

例如:

>a='\u0661\u0666\u0666\u0660'
"١٦٦٠"
>b='\u06f1\u06f6\u06f6\u06f0'
"۱۶۶۰"
>r=/[\u0660-\u0669\u06F0-\u06F9]/g;
/[\u0660-\u0669\u06F0-\u06F9]/g
>a.replace(r,function(c) { return '0123456789'[c.charCodeAt(0)&0xf]; } )
"1660"
>b.replace(r,function(c) { return '0123456789'[c.charCodeAt(0)&0xf]; } )
"1660"