Страницы

Поиск по вопросам

среда, 19 июня 2019 г.

не могу подобрать регулярное выражение

не знаю как составить выражение: надо что бы вводились только цифры и каждые 3 символа вставлялся пробел(с начала строки, типа денежного формата, максимум 99 999). составил выражение replace(/^(\d+)(\d{3})$/g, '$1 $2') , на http://regexr.com/ , на котором я готовлю выражения, все работает как надо, как только вставляю в js - получается "1 2345"
так выглядит функция
$(".s-container").on("change keyup input click", ".input-number", function() { this.value = this.value.replace(/^(\d+)(\d{3})$/g, '$1 $2'); });
а так сам инпут

что я делаю не так?


Ответ

Данные события keyup input срабатывают на каждое отжатие клавиши и изменение значения инпута, поэтому в какой-то момент, после ввода четвертой цифры, происходит замена с добавлением пробела и так как далее цифры вводятся в конец строки - регулярное выражение перестает работать.
Лучше всего не менять полностью значение инпута, это может привести к неочевидным проблемам для пользователя, например если он попытается стрелочками переместить курсор.
Для проблемы в вопросе необходимо просто удалить лишние пробелы, перед тем, как делить число, например так:
$(".s-container").on("change keyup input click", ".input-number", function() { this.value = this.value.replace(' ', '').replace(/^(\d+)(\d{3})$/g, '$1 $2'); });


Комментариев нет:

Отправить комментарий