В ваш шаблон включены соответствующие пробелы, которые имеют значение.
Без пробелов шаблон будет ^100(\.[0]{1,2})?|([0-9]|[1-9][0-9])(\.[0-9]{1,2})?$
Чтобы сопоставить либо 100 с необязательной точкой, либо 1 или 2 нулями, ИЛИ сопоставить цифру 0-99, за которой следуют 1 или 2 десятичных знака, чтобы вы могли обернуть весь шаблон в группу без захвата ^(?:....)$
, используя чередование для любой из возможностей:
^(?:100(?:\.0{1,2})?|(?:[1-9]\d|\d)(?:\.\d{1,2})?)$
См. Демоверсию Regex