Try this one
^(?:\d{1,2}(?:\.\d{1,2})?|100(?:\.0?0)?)$
See it here on Regexr
(?:)
are non capturing groups, that means the match from this group is not stored in to a variable.
\d{1,2}
matches 1 or 2 digits
(?:\.\d{1,2})?
This is optional, a .
followed by 1 or two digits
or
100(?:\.0?0)?)
matches 100
optionally followed by 1 or 2 0
^
matches the start of the string
$
matches the end of the string
Those two anchors are needed, otherwise it will also match if there is stuff before or after a valid number.
Update:
I don't know, but if you want to disallow leading zeros and numbers without two digits in the fraction part, then try this:
^(?!0\d)(?:\d{1,2}(?:\.\d{2})|100\.00)$
I removed the optional parts, so it needs to have a dot and two digits after it.
(?!0\d)
is a negative lookahead that ensures that the number does not start with a 0 and directly a digit following.