регулярное выражение с дефисом между числами

Я должен проверить, находится ли введенная пользователем строка в определенном формате, как показано ниже, например:

123-1234-1234567-1

т.е. после первых 3 цифр дефис, затем после 4 цифр еще один дефис, после семи цифр дефис, затем одна цифра.

Я использовал приведенное ниже регулярное выражение

@"^\(?([0-9]{3})\)?[-. ]?([0-9]{4})[-. ]?([0-9]{7})[-. ]?([0-9]{1})$"

Он отлично работает для приведенного выше выражения, но также будет передавать выражение без -.

eg:-  123-1234-1234567-1 //pass
      123123412345671    //also getting pass.

Вторая строка должна потерпеть неудачу. Какое изменение я должен сделать в регулярном выражении, чтобы добиться того же?


person Sachu    schedule 21.06.2015    source источник
comment
@downvoter, не могли бы вы сказать, в чем проблема в этом вопросе?   -  person Sachu    schedule 21.06.2015


Ответы (2)


Вы можете просто использовать:

^\d{3}-\d{4}-\d{7}-\d$

Если вы хотите разрешить точку и пробел также в качестве разделителя, используйте:

^\d{3}[-. ]\d{4}[-. ]\d{7}[-. ]\d$
person anubhava    schedule 21.06.2015
comment
спасибо за ответ ... это просто и именно то, что мне всегда было нужно, это будут цифры, разделенные только -, но я не знаю, почему кто-то проголосовал за мой вопрос. Разве не ясно? - person Sachu; 21.06.2015
comment
Ваш вопрос был мне совершенно ясен, и ваша попытка была четко показана. Не беспокойтесь о отрицательном голосовании от какого-то триггерного счастливого участника. - person anubhava; 21.06.2015

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

@"^\(?([0-9]{3})\)?[-. ]([0-9]{4})[-. ]([0-9]{7})[-. ]([0-9]{1})$"

демонстрация регулярных выражений

? делает предыдущий шаблон необязательным, поскольку он соответствует 0 или 1 символу. Таким образом, во втором примере механизм регулярных выражений безопасно сопоставляет ноль -, чтобы получить соответствие всей строке.

person nu11p01n73R    schedule 21.06.2015
comment
спасибо за ответ .. ваш вариант также разбудил меня, спасибо за помощь .. проголосую за ваш ответ .. но я не знаю, почему кто-то проголосовал против моего вопроса. Разве не ясно? - person Sachu; 21.06.2015
comment
@Sachu Добро пожаловать. Вопрос действительно ясен, но я понятия не имею, почему за него проголосовали. - person nu11p01n73R; 21.06.2015