Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

интересная задачка по регуляркам: разбор строки с телефонами

2
18 февраля 2008 года
squirL
5.6K / / 13.08.2003
столкнулся со следующей нетривиальной весьма задачей:
есть текстовое поле, в котором пользователем заведены номера телефонов. заведены они в ОЧЕНЬ произвольном виде, например:
Цитата:

8 067 123 43 22 2232341 2232341 0674859532 +3 8067 34322 21 033 211 80 33 453 22 11


формат номера - украинский - +380-хх-yyy-yy-yy

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

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

 
Код:
$ph_fields = "8 067 123 43 22 223 2341 2232341 0674859532 +3 8067 34322 21 033 211 80 33 453 22 11";
$ph_fields =~ s/\D//g;
my @mob_phone = $ph_fields =~ /(80\d{9})|(0\d{9})|(380\d{9})/g;
$ph_fields =~ s/(80\d{9})|(0\d{9})|(380\d{9})//g;
$ph_fields =~ s/(?<=\d)(?=(\d{7})+$)/,/g;
@no_mob_phone = split (',',$ph_fields);

кто предложит более элегантное решение?
12
26 февраля 2008 года
alekciy
3.0K / / 13.12.2005
Имхо, элегантнее, чем с утверждениями это просто реализовать нельзя.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог