Подтвердить что ты не робот

JavaScript не может преобразовать хинди/арабские цифры в реальные числовые переменные

Я пытаюсь использовать DOM, исходящий из внешнего источника, и в нем есть некоторые числовые значения в хинди/арабской транскрипции, например "۱۶۶۰", и когда я хочу преобразовать его в числовое значение, я получаю NaN. Что здесь не так?

Небольшой фрагмент кода для проверки:

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

Ответ 1

Ну, Number функция ожидает цифры от 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

Ответ 2

Я бы предложил вам обработать его на более низком уровне: заменить арабские цифры на соответствующие цифры 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"