Загрузка данных


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