Нужно сделать регулярное выражение по выборке разных телефонов в строке?

Здравствуйте. Столкнулся с такой задачей - нужно к обычным телефонам подставить код города. Но в строке могут находиться как обычный телефон так и сотовый, причем они идут через запятую. А еще может встретится строка уже с кодом города или района.
Вот приблизительно исходный текст: 49-66-66, 49-29-56, 8-912-529-88-91, 8(35231) 4-45-48
Вот что должно получиться 8 (3522) 49-66-66, 8 (3522) 49-29-56, 8-912-529-88-91, 8(35231) 4-45-48

А у меня получается: 8 (3522) 49-66-66, 8 (3522) 49-29-56, 8-912-58 (3522)29-88-91, 8(35231) 4-45-48.

вот какое регулярное выражение я использую: /(\d{2}\-\d{2}\-\d{2})/ соответственно подстановка вот какая: 8 (3522) $1
Функцию использую preg_replace Причем подстановку надо делать только на телефоны такого типа: 49-66-66.
Желательно задать шаблон вида:
Если встретилась подстрока в которой: НЕ 8(4512) 45-12-44, и НЕ 8-915-452-12-88 НО 45-45-45 то тогда подставляем 8 (3522)
Если это сложно сделать регулярными выражениями в одной строке то тогда я буду разбивать строку по запятым и проверять длину полученных подстрок если длина будет равна 8 то подставлю впереди код города.
  • Вопрос задан
  • 83 просмотра
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега PHP
Учим yii: https://youtu.be/-WRMlGHLgRg
Мне кажется стоит сначала разбить строку на массив, по запятой, для этого и explode() подойдет, а потом уже разбирать отдельно определяя есть код или нету, сколько знаков и т.д.

буду разбивать строку по запятым и проверять длину полученных подстрок

а разве у Вас все телефоны 6-значные? Думаю там более сложная логика нужна и в несколько этапов. Проверка на первую 8-ку, проверка на скобки, потом кол-во знаков. Не совсем понимаю почему все коды одинаковые Вы подставляете (3522)? Боюсь тут с регуляркой сложно, какой-то монстр получится.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы