Регулярное выражение для соответствия любому символу за пределами строки данного формата - PullRequest
0 голосов
/ 12 октября 2019

Я хотел бы использовать регулярное выражение в replace() для форматирования ввода валюты с необязательной длиной цифр до десятичной точки и только одной или двумя цифрами после десятичной точки.

По сути, оно должно совпадатьчто-то вроде 9999999,00 или этого 9999999.00, а не этого 9999999,000.

У меня есть следующее регулярное выражение:

value.replace(/[^\d*((\.|\,)\d(\d)?)?$]/, "")

Но это не работает, так как позволяет использовать цифры, . или , в любом порядке, вместо заданного формата.

Можно ли поместить эту строку ^\d*((\.|\,)\d(\d)?)?$ в квадратные скобки [^], чтобы соответствовать любым символам вне формата? Или, может быть, есть другой способ исправить это?

EDIT : я собираюсь использовать его с функцией react-final-form parse, чтобы разрешить только ввод данных данного формата и удалитьвсе остальные персонажи. Вот мой код и окс https://codesandbox.io/s/react-final-form-simple-example-o9jub?fontsize=14

Ответы [ 2 ]

0 голосов
/ 12 октября 2019

Проверьте этот шаблон:

^([1-9]\d*|0?)([,\.]\d{2})?$

Демо с некоторыми образцами: Здесь

0 голосов
/ 12 октября 2019

В вашем выражении есть пара ошибок:

  1. Я не уверен, почему вы добавили квадратные скобки [^...] в выражение - символы в квадратных скобках обрабатываются отдельно, а не какцелое выражение.
  2. Обратите внимание, что регулярные скобки (...) будут фокусировать вывод выражения в соответствие строке в скобках.

Попробуйте это выражение: \d+[\.,]\d{1,2}

  1. \d+ подтверждает, что у вас есть как минимум 1 цифра перед десятичной точкой.
  2. [\.,] - это лучший способ сопоставления различных символов.
  3. \d{1,2}на 1 или 2 цифры выше десятичной точки.
...