Последняя часть вашего шаблона ,*?[0-9]{0,2}
соответствует 0+ раз запятой, за которой следуют 0-2 цифры, что, например, делает общее совпадение действительным для 1.1,,,
.
Что вы также можете сделать этоиспользуйте чередование , чтобы сопоставить либо вариант, который содержит точку и запятую, либо |
для совпадения с одной или несколькими цифрами, за которыми следует дополнительная часть, которая соответствует запятой и 1-2 цифрами.
^(?:[0-9]{1,3}\.[0-9]{1,3},[0-9]{1,2}|[0-9]+(?:,[0-9]{2})?)$
Regex101 demo
Пояснение
^
Начало строки (?:
Группа без захвата [0-9]{1,3}\.[0-9]{1,3},[0-9]{1,2}
Сделать запятую необходимой, когда есть точка |
Или [0-9]+(?:,[0-9]{2})?
Совпадение 1+ цифр, за которыми следует дополнительная запятая и 1-2 цифры
)
Закрыть группу без захвата $
Конец строки