Ваше регулярное выражение не ожидает ни десятичной запятой, ни десятичной запятой, за которой следует две десятичных цифры. Это зависит от того, что вы хотите, но вы можете сделать так, чтобы ваше регулярное выражение соответствовало предложенному входу, выполнив следующее:
^\$?(\d{1,3}(\,\d{3})*|(\d+))(\.\d{1,2})?$
Я изменил {2}
около конца на {1,2}
, чтобы разрешить одну или две десятичные цифры после десятичной точки. Я также изменил .
на \.
, потому что обычное .
в регулярном выражении означает «соответствовать любому символу».