Ваш шаблон ^\d+.\d{0,2}$
принимает 1+ цифр от 0-9 в начале, используя \d+
, поэтому вы должны ограничить его до 0 или 1, используя класс символов.
Если вы не собираетесь сопоставлять цифру, за которой следует одна точка, вы можете превратить эту часть .\d{0,2}
в \d+
, чтобы значения типа 1.
или 0.
были недействительными.
Вы можете сделать это, используя чередование:
^(?:[01](?:\.\d+)?|2(?:\.0+)?)$
Regex demo
let pattern = /^(?:[01](?:\.\d+)?|2(?:\.0+)?)$/;
["0", "1", "2", "0.1", "1.9", "2.0", "0.01", "1.09", "1.009",
"0.", "1.", "-1", "3", "2.1", "2.01", "2.001"
].forEach(s => console.log(s + (pattern.test(s) ? " = ok" : " = not ok")));