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

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

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

Таким образом, он допускает 10 символов до десятичного знака и 2 символа после него. Но я добавляю еще одну функциональность форматирования текстового поля в качестве валюты при наборе текста. Так что если у меня 1234567, то после форматирования он становится 1,234,567. Регулярное выражение не работает, когда я ввожу 10 символов вместо 10 цифр. В идеале это должно быть так, что регулярное выражение игнорирует запятые при подсчете 10.

Я тоже это попробовал ^(([0-9|(\\,)]{0,13})?)?(\\.[0-9]{0,2})?$ но это не похоже на правильный подход. Может ли кто-нибудь помочь мне получить правильное регулярное выражение вместо использования этой настройки.

1 Ответ

0 голосов
/ 09 января 2019

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

"^(?:,*[0-9]){0,10}(?:\.[0-9]{0,2})?$"

Или, если после дробной части . должна быть цифра в дробной части, используйте

"^(?:,*[0-9]){0,10}(?:\.[0-9]{1,2})?$"

См. Демоверсию regex . Часть (?:,*[0-9]){0,10} - это то, что выполняет задание: она соответствует любым 0+ , символам, за которыми следует одна цифра от 0 до 10 раз. Если , также может отображаться до ., добавьте ,* после ((?:,*[0-9]){0,10})?.

Детали

  • ^ - начало строки
  • (?:,*[0-9]){0,10} - от 0 до 10 вхождений 0+ запятых, сопровождаемых цифрой
  • (?:\.[0-9]{0,2})? - необязательная последовательность:
    • \. - период
    • [0-9]{0,2} - от 0 до 2 цифр (если после * 1036 должна быть цифра *, используйте [0-9]{1,2})
  • $ - конец строки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...