Regex - принимать только целые числа и одну десятичную точку - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь создать регулярное выражение, которое принимает только цифры и одну необязательную десятичную точку, используя:

const filterValue = (value) => value.replace(/^([0-9]*|\d*\.\d{1}?\d*)$/g, '').replace(/(\..*)\./g, '$1');

, но filterValue('test1234test') возвращает мне test1234test.

почему?

1 Ответ

1 голос
/ 15 апреля 2020

Похоже, вы хотите сохранить только первую точку и все символы, кроме этой первой точки и цифр.

Вы можете использовать

const filterValue = (value) => value.replace(/^([^.]*\.)|\.+/g, '$1').replace(/[^\d.]+/g, '')

Подробности

  • .replace(/^([^.]*\.)|\.+/g, '$1') - захватывает подстроку от начала строки до первого . в группу 1, чтобы позже восстановить эту часть с обратной ссылкой $1 в шаблоне замены и удалить все 1+ точек где-либо еще
  • .replace(/[^\d.]+/g, '') - удаляет одно или несколько вхождений любого символа, кроме di git и .

JS демо:

const filterValue = (value) => value.replace(/^([^.]*\.)|\.+/g, '$1').replace(/[^\d.]+/g, '')
console.log(filterValue('test1234test'));
console.log(filterValue('test1.2.3.4test'));
console.log(filterValue('te.st1.2.3.4test'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...