За последние 24 часа нас посетили 21495 программистов и 1023 робота. Сейчас ищут 700 программистов ...

Убрать текст вокрук номера телефона

Тема в разделе "Регулярные выражения", создана пользователем dobrmir, 5 дек 2019.

  1. dobrmir

    dobrmir Активный пользователь

    С нами с:
    8 окт 2012
    Сообщения:
    200
    Симпатии:
    2
    Если имеются куски текста, в которых встречается номер телефона, то как для такого отдельного фрагмента удалить всё, кроме номеров телефонов? Вероятнее всего, что в таком фрагменте будет только один номер телефона. Интересует универсальное решение в коде для разных языков программирования, в том числе для Python (на нем сначала будет испытываться).
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    регулярка, но сначала нужно определиться - какого формата номера следует считать телефонными ))))
     
  3. dobrmir

    dobrmir Активный пользователь

    С нами с:
    8 окт 2012
    Сообщения:
    200
    Симпатии:
    2
    Любого формата, который может встретится в интернет справочниках (списков фирм на определенной улице или сгруппированных по какому то признаку).
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    нет понятия "любой" формат
    примеры номеров
    999 999 99 99
    (999) 999 99 99
    (999)-999-99-99
    999-999-9999
    99-99-99
    +79999999999
    а может и просто 99999999999
    и до бесконечности, а еще даже латиницей может быть типа ABAAC
    итд итп
    потому сначала определитесь с форматами, которые будете поддерживать, а потом уже и регулярки можно писать
     
  5. dobrmir

    dobrmir Активный пользователь

    С нами с:
    8 окт 2012
    Сообщения:
    200
    Симпатии:
    2
    Возможно устроюсь в Call центр, потому что у нас в городе сложно найти работу. Пришел на собеседование. Они звонят с сотового телефона по несколько часов в день в заведения общепита своего региона, предлагая оборудование. Думаю, что это вредно, когда сотовый у головы по несколько часов в день и набор номера вручную кнопками отнимает много времени. Хочу автоматизировать, чтобы можно было быстро набирать номер прямо с компьютера. Одна из частей автомазизации - копирование номера телефона в буфер обмена из браузера. Телефон в каталогах может быть совершенно в разных форматах. То есть заранее не знаю, из какого каталога буду брать номера. Потом, если в эту фирму не устроюсь, то для другой работы уже будет задел. Как это копирование планирую осуществлять. Кликаю в браузере мышью по номеру телефона. В буфере обмена оказывается кусок текста. Возможно можно делать захват только цифр. Только не знаю, как это делать, поэтому расматриваю такой вариант, когда копируется кроме цифр ещё и мусор. Это ещё может быть полезно, если промахнулся по номеру.
    Принцип такой:
    После двойного клика курсор уже стоит в тексте. Эмулируем нажатия клавиш:
    Влево - 20-30 раз. Потом зажали ctrl - и вправо - раз 40-50. ctrl+c. В итоге в буфер попал кусок текста по следующему принципу.
    s = 'Пример произвольного числа +7(35335)532568363734. Число может быть и'

    Возможно кликать буду не двойным щелчком, а одинарным.
     
  6. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    ну так это не автоматическое, а полуавтоматическое. тогда просто можно все откидывать кроме цифр и все
     
  7. dobrmir

    dobrmir Активный пользователь

    С нами с:
    8 окт 2012
    Сообщения:
    200
    Симпатии:
    2
    Если можно все кроме цифр откидывать, не могли бы Вы привести код в посте ниже.
     
  8. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    PHP:
    1. $str = "sdfdfs123456789mnbm0hfdec,hrthytr.";
    2. $result = preg_replace("/[^0-9]/", '', $str);
    3. echo $result;
    как то так, не проверял
     
    dobrmir нравится это.
  9. freebsdd

    freebsdd Активный пользователь

    С нами с:
    16 апр 2019
    Сообщения:
    26
    Симпатии:
    2
    В базу сохранить все коды всех стран + длину последующих цифр, вытаскивать из базы и той же регуляркой проверять, это самый оптимальный и точный вариант
     
    dobrmir нравится это.
  10. olegrz

    olegrz Новичок

    С нами с:
    7 дек 2019
    Сообщения:
    15
    Симпатии:
    2
    $number=preg_replace("/[^0-9]/","", $input_text);
    останутся одни циферки
    потом прогоняешь через switch чтобы отфильтровать телефонные номера от просто набора цифр и в набор астериску
     
    dobrmir нравится это.
  11. dobrmir

    dobrmir Активный пользователь

    С нами с:
    8 окт 2012
    Сообщения:
    200
    Симпатии:
    2
    А как прогонять через switch?
     
  12. olegrz

    olegrz Новичок

    С нами с:
    7 дек 2019
    Сообщения:
    15
    Симпатии:
    2
    PHP:
    1. switch ($quant)
    2. {  
    3.   case  3:         $dig3=digit3($destNumber);        $dn=$dig3[0];                     break;
    4.   case  4:         $dig4=digit4($destNumber);        $dn=$dig4[0];                      break;
    5.   case  5:                                         $dn=$destNumber;                      break;
    6.   case  6:         $dig6=digit6($destNumber);        $dn=$dig6[0];                     break;
    7.   case  7:         $dig7=digit7($destNumber);        $dn=$dig7[0];                       break;
    8.   case  8:                                      $dn=null;                               break;
    9.   case  9:         $dig9=digit9($destNumber);        $dn=$dig9[0];                      break;
    10.   case 10:                                         $dn=null;               $level=0;                   break;
    11.   case 11:         $dig11=digit11($destNumber);    $dn=$dig11[0];                      break;
    12.   case 12:         $dig12=digit12($destNumber);    $dn=$dig12[0];                     break;
    13.   case 13:         $dig13=digit13($destNumber);    $dn=$dig13[0];                 break;
    14.   case 14:         $dig14=digit14($destNumber);    $dn=$dig14[0];                   break;  
    15.   default:                                        $dn=null;          
    16. }
    17. if ($level==0) {
    18. echo  "Набраный номер<br>не существует!";
    19. }
    фильтруешь по длинне номера
    а потом по первым цифрам

    PHP:
    1. function digit6 ($x) {
    2. $state=array();
    3. $z=substr($x,0 ,1);
    4. switch ($z)
    5. {  
    6.   case  0:         $ds=null;                                  break;
    7.   case  1:         $ds=null;                                       break;
    8.   case  2:         $ds='9'.$x;                                 break;
    9.   case  3:         $ds='9'.$x;                                      break;
    10.   case  4:         $ds='9'.$x;                                        break;
    11.   case  5:      $ds='9'.$x;                                       break;
    12.   case  6:         $ds='9'.$x;                                       break;
    13.   case  7:         $ds=null;                                         break;
    14.   case  8:         $ds=null;                                         break;
    15.   case  9:         $ds=null;                                         break;
    16.   default:        $ds=null;        
    17. }
    18. return $ds;
    19. }
    как то так. У вас в зависимости от региона может быть другой набор фильтров
    --- Добавлено ---
    на $level не обращайте внимание это уровень доступа для юзеров,
     
    dobrmir нравится это.
  13. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    какой жуткий код с кучей свитчей/кейсов
     
  14. olegrz

    olegrz Новичок

    С нами с:
    7 дек 2019
    Сообщения:
    15
    Симпатии:
    2
    код не элегантный, это точно.
    Но вопрос не в коде, а в том что надо прогнать полученные циферки через шаблон и в результате получить
    1 этот телефонный номер?
    2 этот номер используется в этом регионе?
    3 если да то модифицировать для осуществления звонка из диалплана астериск
    4 по номеру получить провайдера для записи в БД
    5 по номеру установит level по которому ограничивается доступ конкретного юзера для осуществления звонка по этому направлению.
    А приведенные фрагменты сильно обрезаны..
    Извините за офф-топик. Я просто хотел сказать что для звонка нужно прогонять полученные циферки через шаблон. А как будет прописан шаблон, это другой вопрос...
     
  15. dobrmir

    dobrmir Активный пользователь

    С нами с:
    8 окт 2012
    Сообщения:
    200
    Симпатии:
    2
    Возможно Астериск использовать не буду. Так как это возможно будет одно рабочее место.
     
  16. acho

    acho Активный пользователь

    С нами с:
    28 дек 2016
    Сообщения:
    854
    Симпатии:
    210
    Адрес:
    Санкт-Петербург