Попробуйте это
^\$?(?:\d+|\d{1,3}(?:,\d{1,3})*)(?:\.\d{2})?$
Посмотрите это здесь на Regexr
Единственное, что не соответствует, это ваш третий последний пример, у него есть пробел передточкаЭто действительно так?
Редактировать:
У моего решения для запястья есть ограничение, что он будет принимать числа, начинающиеся с 0, как 001. Это решение использует отрицательный прогноз наИзбегайте этого:
^\$?(?!0\d)(?:\d+|\d{1,3}(?:,\d{1,3})*)(?:\.\d{2})?$
Смотрите это здесь на Regexr
Решение без ожидания
^\$?(?:0|[1-9]\d*|[1-9]\d{0,2}(?:,\d{1,3})*)(?:\.\d{2})?$
Смотрите это на RegExr