gpojd ответ правильный. Однако вот почему ваше регулярное выражение не работает.
Прежде всего, вам нужны первые $ внутри (). Потому что в противном случае он должен будет совпадать с концом строки, а затем позже с последующим концом строки, что, конечно, невозможно.
Во-вторых, символ точки должен стать \. потому что точка сама по себе соответствует любому символу, но вы хотите фактическую точку. И наконец, вам нужны разделители, как предложил кто-то другой. Вот что соответствует вашему регулярному выражению:
первая, две или три цифры, обязательно.
Затем любой символ, за которым следуют две цифры, необязательно.
Затем конец строки, обязательный.
Затем одна цифра, опционально.
Затем снова конец строки, обязательно.
Поскольку вы программист, может быть трудно привыкнуть к мышлению с помощью регулярных выражений; вы привыкли думать в терминах операторов if-else, но регулярные выражения на самом деле не работают таким образом.
Опять же, вариант выше достаточно хорош, но если бы я написал для этого регулярное выражение, я бы добавил:
/^100(.00)?|([1-9]?[0-9])(\.[0-9]{2})?$/
Итак, либо 100, за которыми следует необязательный .00, либо: сначала необязательная ненулевая цифра, а затем обязательная цифра (эти числа составляют цифры от 0 до 99), затем необязательно точка, за которой следуют две цифры.