Ваш регулярное выражение включает в себя часть [,]
, которая переводится как «должна содержать запятую в этой позиции».
Если запятая действительно требуется, то [21]
не будет оцениваться, но [21,]
будет.
Если запятая должна была быть необязательной, то часть выражения должна была быть [,]?
, которая производит нуль или одно повторение, или, возможно, [,]*
, которое представляет собой любое количество повторений.
Окончательное рабочее выражение было ^(\[)(\d{1,2}([-]\d{1,2})?[,]?)*(\])$
, которое передает все ваши ожидаемые входы.
Уточнение - Как отмечено в комментариях, ваша упаковка одного символа в квадратных скобках, указывающая класс символов. Это необязательно, если ваш класс символов имеет только один символ и делает сложный для чтения синтаксис, например regexp, еще сложнее. Ваше выражение можно укоротить до ^(\[)(\d{1,2}(-\d{1,2})?,?)*(\])$
Это потому, что запятая не является обязательной. В стороне, не нужно помещать '-' и', 'в класс символов. –
Even/^ (\ [) (\ d {1,2} ([-] \ d {1,2})? [,]?) * (\]) $/Не работает. Не могли бы вы найти правильное регулярное выражение. –