For completeness, here is a solution without workaround statements:
^([1-9]\d{0,2}(\.\d{1,2})?|0?\.(\d[1-9]|[1-9]\d?))$
(If necessary, capture the capture group)
[1-9]\d{0,2}(\.\d{1,2})? corresponds to integers from 1 to 999 or decimal numbers from 1.00 to 999.99, both cases without leading 0, and the fractional part can have 1 or 2 digits.
0?\.(\d[1-9]|[1-9]\d?) Corresponds to 0.01-0.99, while 0 in the integer part is optional, and the fractional part consists of 1 or 2 digits.
nhahtdh
source share