Регулярное выражение из 7-значных чисел с необязательными специальными символами между ними - PullRequest
1 голос
/ 23 мая 2019

Мне нужно подтвердить 7-значный номер с дополнительным тире между ними.

Мне удалось получить, если я буду использовать ниже.

^(\d-?\d-?\d-?\d-?\d-?\d-?\d)$

Есть ли способ сократить это?

Я пытался ^(\d+(-?){7})$, но он не работает.

Valid 123-09-23
Valid 12-3092-3
Valid 1-230-9-23
Valid 1234567

Invalid -1237883
Invalid 12345678
InValid 123-45-678

PS: я буду реализовывать это в своем приложении Javascript.

Ответы [ 2 ]

3 голосов
/ 23 мая 2019

Повторяйте только группу (7 раз, так что вы получите всего 7 цифр), и не повторяйте также \d (иначе вы можете сопоставить больше цифр, чем нужно):

^(?:\d-?){7}$

https://regex101.com/r/yLQHWW/1

(Ваш исходный шаблон эквивалентен: «Совпадение одной или нескольких цифр, за которыми могут следовать до 7 - символов».)

2 голосов
/ 23 мая 2019

Начните с цифры и повторите -?\d шесть раз:

^\d(-?\d){6}$

https://regex101.com/r/oTSqri/1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...