2013-06-10 21 views
15

Próbuję użyć DOM pochodzącego z zewnętrznego źródła, a w nim są pewne wartości numeryczne w transkrypcji Hindi/Arabski, takie jak "۱۶۶۰", a kiedy chcę przekonwertować go na wartość liczbową, otrzymam NaN. Co jest nie tak?JavaScript nie może konwertować liczb w języku hindi/arabskim na prawdziwe zmienne numeryczne

Trochę Fragment kodu być sądzony:

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

Próbowałem swój kod w konsoli Chrome i mam 'TypeError: Object Liczba function() {[natywny kod]} nie ma metody "parseLocale". Brak szczęścia w przeszukiwaniu dokumentacji Mozilli. Czy to jest tylko IE? – Renan

+1

Nie trzeba używać metody 'parseLocale'. –

+2

JavaScript nie [jeszcze] (http://wiki.ecmascript.org/doku.php?id=globalization:globalization) [wsparcie] (http://es5.github.io/#x7.8.3) [parsing ] (http://es5.github.io/#x15.1.2.2) takie liczby. –

Odpowiedz

30

Otóż Number function robi oczekiwać cyfry od 0 do 9 i nie obsługiwać te arabskie. Trzeba będzie zadbać o to sam:

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

Zastosowanie:

> parseArabic("۱۶۶۰") 
1660 
+1

Pierwszy zestaw liczb to arabski, drugi to [perski] (http://sartre2.byu.edu/persian/persianword/numbers.htm). –

8

chciałbym zaproponować Ci poradzić na niższym poziomie: wymień arabskie cyfry z odpowiednimi cyframi ASCII, a następnie przekonwertować.

Na przykład:

>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 ''[c.charCodeAt(0)&0xf]; }) 
"1660" 
>b.replace(r,function(c) { return ''[c.charCodeAt(0)&0xf]; }) 
"1660" 
Powiązane problemy