function formatAmountInput(value) {
// Оставляем только цифры и одну запятую
value = value.replace(/[^\d,]/g, '');
const commaIndex = value.indexOf(',');
let integerPart;
let decimalPart = '';
if (commaIndex >= 0) {
integerPart = value.slice(0, commaIndex);
decimalPart = value.slice(commaIndex + 1);
} else {
integerPart = value;
}
integerPart = integerPart.replace(/\D/g, '');
decimalPart = decimalPart.replace(/\D/g, '');
// Максимум 18 цифр ВСЕГО
if (integerPart.length > 18) {
integerPart = integerPart.slice(0, 18);
decimalPart = '';
} else {
const maxDecimalLength = 18 - integerPart.length;
decimalPart = decimalPart.slice(0, maxDecimalLength);
}
// Разделитель тысяч — обычный пробел.
// Number() здесь специально НЕ используем,
// чтобы не терять точность на больших числах.
integerPart = integerPart.replace(
/\B(?=(\d{3})+(?!\d))/g,
' '
);
return commaIndex >= 0
? `${integerPart},${decimalPart}`
: integerPart;
}