RegExp для форматирования input.value
Добрый день.
Есть задача, создать input.value с мгновенным форматированием числа. Нечто похожее https://www.omnicalculator.com/finance/margin Юзер вводит 5000 - инпут сразу меняется на 5,000 и так далее. Это можно решить следующим кодом
input.value = input.value.split(',').join('').replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,")
Но при input type = number это, увы, не работает. В таком случае выход следующий - сделать input type = text и добавить запрет на ввод любых символов, кроме цифр 0-9, запятой, минуса и точки. Прошу вашей помощи с регуляркой, которая будет убирать все "неразрешённые символы". В моём случае, разрешены цифры, запятая, минус и точка. Всё остальное запрещено. Спасибо |
Кажется, придумал решение
input.value = input.value.replace(/[^0-9-,.]/g, ''); |
split(',').join('') не зря там стоят...
нужно преобразовать число в строку используя String()
alert(String(5000).split(',').join('').replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,"))
оформите правильно вопром, покажите нерабочий пример |
input.value и так строка) зачем оборачивать input.value в String() ???
|
Цитата:
если у вас на выходе текст, то регулярка работает,
'5000'.split(',').join('').replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,")
у вас проблема с присваиванием так как на выходе у регулярки текст, Вы не можете вставить текст в input type = number |
Да я ж уже написал, что я уже нашёл решение.
Первая регулярка - работает. Мне нужна была вторая регулярка.
let input = document.querySelector('#input')
input.addEventListener('input', () => {
input.value = input.value.replace(/[^0-9-,.]/g, '');
input.value = input.value.split(',').join('').replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,")
})
|
сорри , это я не дочитал задание
по вашему коду найденному решению, немного лишнего цель:нужно удалить все кроме чисел и '.', и поставить "," у Вас же split(',').join('') удаляет ",", это лишнее, так как дальше мы удалим ее replace(/[^0-9-,.]/g, '') удаляет все, кроме чисел, "," хотя "," не нужна. оставьте так
let input = document.querySelector('#input')
input.addEventListener('input', () => {
input.value = input.value.replace(/[^.0-9]/g,"").replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,")
})
был бы рабочий или нерабочий пример типа [НTML run]...[/html], потестили бы |
<input is="input-separator" id="test" value=""/>
<button onclick="alert(test.value)">Show value</button>
<script>
customElements.define('input-separator', class extends HTMLInputElement {
constructor() {
super();
addEventListener('input', _ => {
this.value = new Intl.NumberFormat('en-GB').format(this.value.replace(/\D+/g, ''));
})
}
}, {extends: 'input'});
</script>
вариант :dance: |
| Часовой пояс GMT +3, время: 20:38. |