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, время: 01:37. |