В реагирующем Js, на самом деле у меня есть большая форма, в которой много текстовых полей для вычисления числа, поэтому я хочу создать глобальную функцию для преобразования чисел в значения, разделенные запятыми, а также запретить пользователю вводить буквы алфавита.
Функция числового формата:
format_number(number, prefix, thousand_separator, decimal_separator) {
let thousand_separator = thousand_separator || ',';
let decimal_separator = decimal_separator || '.';
let regex = new RegExp('[^' + decimal_separator + '\\d]', 'g');
let number_string = number.replace(regex, '').toString();
let split = number_string.split(decimal_separator);
let rest = split[0].length % 3;
let result = split[0].substr(0, rest);
let thousands = split[0].substr(rest).match(/\d{3}/g);
if (thousands) {
separator = rest ? thousand_separator : '';
result += separator + thousands.join(thousand_separator);
}
let result = split[1] != undefined ? result + decimal_separator + split[1] : result;
return prefix == undefined ? result : (result ? prefix + result : '');
}
Конструктор:
constructor(props){
super(props);
this.state={
monthlyIncome: '',
otherMonthlyIncome: '',
}
this.format_number = this.format_number.bind(this);
}
Форма начальной загрузки:
<h4>Sources of Income</h4>
<div className="form-group col-md-6 col-sm-6 col-xs-12">
<label>Monthly Income (AED / Month)</label>
<input type="text" className="form-control" value={this.state.monthlyIncome} id={'monthlyIncome'} onChange={this.format_number}/>
</div>
<div className="form-group col-md-6 col-sm-6 col-xs-12">
<label>Other Monthly Income (AED / Month)</label>
<input type="text" className="form-control" value={this.state.otherMonthlyIncome} id={'otherMonthlyIncome'} onChange={this.format_number}/>
</div>
Заранее спасибо