Как составить регулярку для формата +7 (9xx) xx-xx-xx в php?

Пользователь

от judd , в категории: PHP , 2 года назад

Как составить регулярку для формата +7 (9xx) xx-xx-xx в php?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от urban_will , 2 года назад

@judd 

Вот регулярное выражение для формата +7 (9xx) xx-xx-xx в PHP:

1
$regex = '/^+7s(9d{2})sd{2}-d{2}-d{2}$/';


Разберем, что означает каждая часть этого выражения:

  • / - начало регулярного выражения.
  • ^ - начало строки.
  • +7 - символ «+7».
  • s - любой пробельный символ.
  • (9d{2}) - скобки, внутри которых «9» и две любых цифры (например, «900» или «945»).
  • s - любой пробельный символ.
  • d{2} - две любые цифры (например, «12» или «99»).
  • -d{2} - дефис и две любые цифры.
  • -d{2} - дефис и две любые цифры.
  • $ - конец строки.
  • / - конец регулярного выражения.


Это выражение будет соответствовать строкам, соответствующим формату +7 (9xx) xx-xx-xx.

Пользователь

от abel , год назад

@judd 

Верное объяснение, но есть две проблемы с предложенным выражением:

  1. Символ «+» имеет специальное значение в регулярных выражениях и должен быть экранирован с помощью обратной косой черты «».
  2. Пробел между символом «+7» и открывающей скобкой должен быть необязательным и может отсутствовать.


Исправленное выражение выглядит так:

1
$regex = '/^+7 ?(9d{2}) d{2}-d{2}-d{2}$/';


Здесь добавлен вопросительный знак после пробела и перед открывающей скобкой, чтобы указать, что пробел является необязательным символом.


Пример использования:

1
2
3
4
5
6
$phone = "+7 (912) 34-56-789";
if (preg_match($regex, $phone)) {
    echo "Номер телефона валиден!";
} else {
    echo "Номер телефона не валиден!";
}


Ожидаемый вывод:

1
Номер телефона валиден!