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

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

100,00 - can pass
50,00 - can pass
100.000,00 - can pass
100.000,01 - more than 100k not pass

Теперь у меня есть регулярное выражение для проверки маски, но я не могу ограничить диапазон ...

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

Кто-нибудь знает, какя могу достигнуть этого ограничения?

1 Ответ

0 голосов
/ 23 сентября 2019

Вам необходимо проверить часть 100.000,00 отдельно.Кроме того, помните, что \. соответствует точке, и что в текущем регулярном выражении вы разрешаете неограниченное количество повторений, поэтому 100.000.000.000,00 в настоящее время проходит.

Попробуйте это:

^\$?(?:100\.000,00|(?:[1-9]\d?\.\d{3}|[1-9]\d{0,2}|0)\,\d{1,2})$

Проверьте это жить на regex101.com .

Объяснение:

^                   # Start of string
\$?                 # Match optional dollar sign
(?:                 # Group: Match either
 100\.000,00        # 100.000,00
|                   # or
 (?:                # Group: Match either
  [1-9]\d?\.\d{3}   # a number between 1.000 and 99.999
 |                  # or
  [1-9]\d{0,2}      # a number between 1 and 999  
 |                  # or
  0                 # 0
 )                  # End of inner group
 \,\d{1,2}          # Match , and one or two digits
)                   # end of outer group
$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...