Регулярное выражение: проверить длину, должен содержать цифры, должен содержать 3 дефиса - PullRequest
0 голосов
/ 03 октября 2011

Я ищу регулярное выражение для проверки телефонных номеров.

Вот что я хотел бы, чтобы мое регулярное выражение подтвердило:

  • Должно быть длиной от 14 до 17 символов
  • Должен состоять из всех цифр и содержать 3 дефиса

Допустимые форматы:

5-555-555-5555
55-55-555-5555
55-555-555-5555
555-555-555-5555
5555-555-555-5555

Мой текущий код выглядит так:

^.*(?=.{14,17})(?=.*\-{3,})(?=.*[\d\-]).*$

Допускается использование более 3 дефисов, а длина может превышать 17 символов.

Заранее спасибо за помощь!

Ответы [ 4 ]

1 голос
/ 03 октября 2011

Вот уродливая версия грубой силы, которая просто перечисляет 4 допустимых формата в явном виде:

^(\d-\d{3}-\d{3}-\d{4})|(\d{2}-\d{2}-\d{3}-\d{4})|(\d{2}-(\d{3}-){2}\d{4})|((\d{3}-){3}\d{4}$)|(^\d{4}-(\d{3}-){2}\d{4})$

Вот ссылка Rubular .

0 голосов
/ 08 января 2014

Я знаю, что это старо, но я принял вызов и сделал отредактированную версию ответа Амбер без брутфорса.

/^(?=.{14,17}$)\d{1,4}(?:\-\d{3}){3}\d$/

Имеет возможность принудительного применения формата (x {1,4} -xxx-xxx-xxxx) и короче, чем ответ Марка Уилкинса.

Ответ Амбер неполный, поскольку он не поддерживает формат (5-555-555-5555555 проверяется, когда четко указано, что он не является допустимым форматом), но он устанавливает длину с -1 символом, чем ответ Нарендры Ядала .

РЕДАКТИРОВАТЬ (14/01/2014):

Это сокращенный ответ:

/^\d{1,4}(?:\-\d{3}){3}\d$/

То, что я сделал, было просто: я забрал взгляд.

Это было бесполезно в этом случае.

Это на 13 символов больше, чем ответ Нарендры Ядала, и на 12 символов больше моего предыдущего.

0 голосов
/ 03 октября 2011

Вы можете попробовать это

/(?=^.{14,17}$)^\d+-\d+-\d+-\d+$/.test('2332-32332-233-22')

(?=.{14,17}) сначала утверждает с помощью прогнозирования, что длина строки составляет от 14 до 17 символов. Затем он совпадает, чтобы увидеть, что между цифрами есть три дефиса. ^ and $ удостоверяется, что больше ничего нет.

0 голосов
/ 03 октября 2011

Как насчет этого:

/^(?=.{14,17}$)(\d+-){3}\d+$/
...