2015-06-10 3 views
0

я написал регулярное выражение Javascript нижеJavascript Regular Expression (exp)? вопросы

/^(\[)(\d{1,2}([-]\d{1,2})?[,])*(\])$/ 

Я пытаюсь проверить против ввода текста [21], но это не удается. Я с помощью проверки http://www.regexplanet.com/advanced/javascript/index.html

Я заподозрить проблемы с ([-]\d{1,2})?

входы, которые должны проходить являются [12-23] или [34] или [12-23,34] Пожалуйста, помогите

+0

Это потому, что запятая не является обязательной. В стороне, не нужно помещать '-' и', 'в класс символов. –

+0

Even/^ (\ [) (\ d {1,2} ([-] \ d {1,2})? [,]?) * (\]) $/Не работает. Не могли бы вы найти правильное регулярное выражение. –

ответ

3

Ваш регулярное выражение включает в себя часть [,], которая переводится как «должна содержать запятую в этой позиции».

Если запятая действительно требуется, то [21] не будет оцениваться, но [21,] будет.

Если запятая должна была быть необязательной, то часть выражения должна была быть [,]?, которая производит нуль или одно повторение, или, возможно, [,]*, которое представляет собой любое количество повторений.

Окончательное рабочее выражение было ^(\[)(\d{1,2}([-]\d{1,2})?[,]?)*(\])$, которое передает все ваши ожидаемые входы.

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

+0

/^ (\ [) (\ d {1,2} ([-] \ d {1,2})? [,]?) * (\]) $/Не проходит [21] –

+0

Квадрат скобки нужно избегать, так как они были в вашем первоначальном вопросе и мой ответ! Почему вы его изменили? – Jamiec

+0

@Jamiec: Я думаю, что они есть, но без уценки вы не можете их видеть. –