Этот код будет захватывать любое значение, которое элемент input
в настоящее время имеет, удаляет все символы ,
и .
и преобразует String в Число , используя toLocaleString () , который принимает язык параметр:
// listens to an "input" event on the <input> element
document.querySelectorAll('input')[0].addEventListener('input', onInput_Arabic);
document.querySelectorAll('input')[1].addEventListener('input', onInput_normal);
function onInput_normal(){
// convert into a Number & cleanup the input's value
var v = +(this.value.replace(/[,|\.|\D]/g,''));
// replace the input's value with the formatted wanted value
this.value = this.value ? v.toLocaleString() : '';
}
function onInput_Arabic(){
// convert into a Number & cleanup the input's value
// var v = +(this.value.replace(/[,|\.|\D]/g,''));
var v = transformNumbers.toEnglish( this.value );
// replace the input's value with the formatted wanted value
this.value = this.value ? (+v).toLocaleString('ar-EG') : '';
}
// transforms Numerals from one language system to another
var transformNumbers = (function(){
var numerals = {
persian : ["۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹"],
arabic : ["٠", "١", "٢", "٣", "٤", "٥", "٦", "٧", "٨", "٩"]
};
function fromEnglish(str, lang){
var i, len = str.length, result = "";
for( i = 0; i < len; i++ )
result += numerals[lang][str[i]];
return result;
}
return {
toEnglish : function(str){
var num, i, len = str.length, result = "";
for( i = 0; i < len; i++ ){
num = numerals["persian"].indexOf(str[i]);
num = num != -1 ? num : numerals["arabic"].indexOf(str[i]);
if( num == -1 ) continue // num = str[i];
result += num;
}
return result;
},
toPersian : function(str, lang){
return fromEnglish(str, "persian");
},
toArabic : function(str){
return fromEnglish(str, "arabic");
}
}
})();
input{ width:90%; display:block; padding:5px; margin:1em 0; }
<input placeholder='Type Number in Eastern-Arabic (٢٤٦٦٩٢٤٦٦٩)'>
<input placeholder='Type Number in common language (123456) '>
Проверьте мой другой ответ о том, как преобразовать строку String в строку, разделенную «тысячами», ио разрешении ввода только чисел см. этот ответ .