Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Поправить фильтр для инпута (https://javascript.ru/forum/misc/75524-popravit-filtr-dlya-inputa.html)

MC-XOBAHCK 16.10.2018 16:26

Поправить фильтр для инпута
 
Если это можно, помогите пожалуйста поправить фильтр для инпута.
Сам фильтр пропускает только числа и заменяет запятую на точку.

Проблема в том, что можно ввести вторую точку.
Например сейчас можно ввести так - 21.8454.789

<input type="text" id="test">
<script>
    document.querySelector('#test').addEventListener('input', function() {
        this.value = this.value.replace(/[,\.]+/, '.').replace(/[^\d.]/, '');
    });
</script>

Есть ли возможность исключить вторую точку?

j0hnik 16.10.2018 16:47

document.querySelector('#test').addEventListener('input', function() {
        this.value = this.value.replace(/[,\.]+/, '.').replace(/[^\d.]|(?<=\.\d*)\./, '');
    });

Это экспериментальная технология =)

рони 16.10.2018 17:06

MC-XOBAHCK,
<input type="text" id="test">
<script>
    document.querySelector('#test').addEventListener('input', function() {
        this.value = this.value.replace(/,/, '.').replace(/\./g, function(a, b, c) { 
    return c.indexOf(a) == b ? a : ''
}).replace(/[^\d.]/, '');
    });
</script>

MC-XOBAHCK 16.10.2018 17:28

Спасибо ВАМ! Оба варианта работают правильно, по крайней мере в гугл-хроме.
Теперь появилась новая проблема - какой из этих вариантов выбрать?

j0hnik 16.10.2018 18:13

MC-XOBAHCK,
берите второй, мой только для современных браузеров.
Обычно использую babel поэтому пишу используя самые последние стандартны языка, а там само транспилируется под старье.

MC-XOBAHCK 16.10.2018 18:40

j0hnik, теперь я понял смысл "экспериментальная технология".
У меня все скрипты тоже через бабыль прогоняются в гальпе и минимизируются через uglify. Мне непринципиально стандарт.

Aetae 16.10.2018 21:04

А разве бабел правит регулярки? Или там плагин какой?

j0hnik 17.10.2018 10:56

Aetae,
для lookbehind глянул сейчас, не нашел.


Часовой пояс GMT +3, время: 10:26.