Вы должны учитывать порядок и быть более точным:
^(?:>|<|>=|<=)(?:[1-9]\d*|0)$
(?:>|<|>=|<=)
- набор допустимых операторов (?:[1-9][0-9]*|0)
- число без нуля в начале
Таким образом, полная переменная regex
будет инициализирована как:
regex = /^(?:>|<|>=|<=)(?:[1-9]\d*|0)$|g/i;
Вы добавили совпадение n..n
в качестве альтернативы.Вот, пожалуйста:
^((>|<|>=|<=)|([1-9]\d*|0)\.\.)([1-9]\d*|0)$
\.
буквально соответствует точке .
и должно быть экранировано
Проверьте это:
regex = /^((>|<|>=|<=)|([1-9]\d*|0)\.\.)([1-9]\d*|0)$|g/i;
array = new Array();
array[0] = ">2"; // valid
array[1] = ">0"; // valid
array[2] = "2..3" // valid
array[3] = "=2"; // invalid
array[4] = ">01"; // invalid
array[5] = "2>"; // invalid
array.forEach(item => console.log(regex.test(item)));
Если вы не возражаете против начального нуля, просто используйте:
^((>|<|>=|<=)|\d*\.\.)\d*$