Вам необходимо проверить часть 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
$