Неверное расположение каретки в input с валидацией?

Есть input с денежной маской - пробел после каждого третьего символа с конца

  1. Почему не удаляется символ клавишей Del, если каретка перед пробелом?
  2. Почему сбивается сохранение каретки? Должна оставаться на том же месте после изменений, но сбивается. Судя по всему из-за пробелов, но они вроде должны сохраняться, так как selectionStart стоит вначале функции.

document.querySelectorAll('input').forEach( input => {
    if (input.dataset && input.dataset.validate === 'money') {
        input.addEventListener('input', ({target}) => {
            // Сохраняем расположение каретки
            let saveCarriage = target.selectionStart;

            // 1. Удаляем все буквы, 2. Удаляем все пробелы, 3. Ставим пробел между 3 символами
            target.value = target.value.toString().replace(/[A-Za-zА-Яа-яЁё]/, '').replace(/\s/g, '').replace(/(\d)(?=(\d{3})+(\D|$))/g, '$1 ');

            // Устанавливаем расположение каретки
            target.setSelectionRange(saveCarriage,saveCarriage);
        })
    }
});
<input type="text" data-validate="money" placeholder="Деньги" value="">


Ответы (0 шт):