Как после 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 шт):
Всё на самом деле проще чем вы думаете, вот код (снизу его разбор):
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 (числа с плающей запятой), тогда оставить его как есть, если ни одно из условий не сработало, тогда выдавать сформатированный текст.