Как после 0 ставить запятую в input?

Имеется такой код:

var formatter = new Intl.NumberFormat("ru");
function handleChange(e){
    var est = e.target.value.toString().replace(/\D/g,'')
    setValue(formatter.format(est));
}

При вводе числа в input, он форматирует его в таком виде: 1 000 000 Но мне нужно сделать так, чтоб если пользователь ввёл первым числом 0, то формат был таким: 0,000000 Как это возможно сделать? Весь интернет перекопал, так и не нашел решения этого вопроса. Буду крайне благодарен за помощь!


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

Автор решения: ΝNL993

Всё на самом деле проще чем вы думаете, вот код (снизу его разбор):

let input = document.querySelector('input')
let output = document.querySelector('.output')

input.addEventListener('input', handleChange)

// --- Код ответа ---

let formatter = new Intl.NumberFormat("ru");

function handleChange(e){
  let target = e.target
  let targetValue = target.value
  let str = targetValue.toString()
  let _str = +(str.replace(/,/, '.'))

  let est = str.replace(/\D/g,'')
  let formatted = formatter.format(est)

  let value

  if(str.startsWith('0')) {
    value = '0,' + str.slice(1)
  } else if(_str && !Number.isInteger(_str)) {
    value = _str.toString().replace(/\./g, ',')
  } else {
    value = formatted
  }

  setValue(value);
}

// --- /Код ответа ---

function setValue(value) {
  output.textContent = value
}
input {
  border: 1px solid #000;
  border-radius: 2px;
}
<input type="text">
<p class="output">0</p>

Я перенёс некоторые значения в переменные чтобы с ними можно было удобно работать. Объявляем переменную value, если наша строка начинается с нуля, тогда value будет равнятся 0, + value (но без первого симовола), если же наша строка является float (числа с плающей запятой), тогда оставить его как есть, если ни одно из условий не сработало, тогда выдавать сформатированный текст.

→ Ссылка