Проблема в том, что (\.[0-9]{1,4})?
соответствует необязательной последовательности точек и от одной до четырех любых цифр после 0
, 1
, 11
, 111
и 200
тоже.Вам нужно использовать (\.[0-9]{1,4})?
для чисел до 200
и (\.0{1,4})?
для 200
.
^(?:(?:[1-9]?[0-9]|1[0-9]{2})(?:\.[0-9]{1,4})?|200(?:\.0{1,4})?)$
См. это демо
Я предлагаю использоватьгруппы, которые не захватывают, а не захватывают группы (то есть конвертируют (...)
в (?:...)
), поскольку вы не собираетесь использовать эти части позже.
Я вижу, что ваш шаблон создан онлайн автоматически, поэтому я решил немного его «сжать».
Детали шаблона
^
- начало строки (?:
- начало группы без захвата, соответствующей двум альтернативам: (?:[1-9]?[0-9]|1[0-9]{2})(?:\.[0-9]{1,4})?
: (?:[1-9]?[0-9]|1[0-9]{2})
- необязательная цифра от 1
до 9
, а затем любая 1цифра или 1
, за которой следуют любые две цифры (?:\.[0-9]{1,4})?
- необязательная последовательность точек, за которыми следуют от одной до четырех любые цифры
|
- или 200(?:\.0{1,4})?
- 200
, за которыми следуют 1 или 0 вхождений .
, за которыми следуют от 1 до 4 нулей )$
- конец группы истрока.