1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вступайте в наш Telegram чат: https://t.me/a_parser Нас уже 2600+ и мы растем!
    Скрыть объявление

[HOWTO] Парсинг телефонов (регулярное выражение)

Тема в разделе "Делимся опытом", создана пользователем Bran, 16 сен 2016.

  1. Bran

    Bran A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    31 авг 2013
    Сообщения:
    32
    Симпатии:
    3
    Гуру regex, прошу вашей помощи.

    Нужно спарсить номера с микс источников. Номера всегда начинается с +435/05 + 8 цифр
    Формат:
    +435XXXXXXXX - международный
    05XXXXXXXX - местный

    План минимум для основных форматов:
    Код:
    +43511111111
    +43 511111111
    +43 511 111111
    0511111111
    0511 111111
    Пробовал по аналогии делать, например это
    Код:
    /^\s*(?:\+?(\d{1,3}))?([-. (]*(\d{3})[-. )]*)?((\d{3})[-. ]*(\d{2,4})(?:[-.x ]*(\d+))?)\s*$/gm
    почти подходит, но собирает много мусора и ненужные префиксы.



    Возможно ли составить регулярку которая бы просто брала +435/05 и 8 цифр (в идеале с отсеиванием пробелов и прочих символов)?
    Был бы очень благодарен...


    План максимум:
    +43511111111
    +4351111 1111
    +43511 11 11 11
    +43 511111111
    +43 51111 1111
    +43 511 111111
    +43 511 111 111
    +43 511 11 11 11
    +43511 111111
    +43511 111 111
    +43511 11 11 11
    +43(0)511111111
    +43(0)51111 1111
    +43(0)511 111 111
    +43(0)511 11 11 11
    +43(0) 511 111111
    +43(0) 511 111 111
    +43(0) 511 11 11 11

    0511111111
    0511 111111
    0511 111 111
    0511 11 11 11
    0 511111111
    0 51111 1111
    0 511 111111
    0 511 111 111
    0 511 11 11 11
     
  2. Forbidden

    Forbidden Administrator
    Команда форума A-Parser Enterprise

    Регистрация:
    9 мар 2013
    Сообщения:
    3.336
    Симпатии:
    1.791
    одной регуляркой тут не обойтись, необходимо 3 действия:
    1. собрать похожие на номер последовательности
    2. почистить на мусор
    3. проверить более строгой регуляркой
    Используем для сбора номеров:
    Код:
    (?:^|[^\d])((?:\+43|0)[\d ()]+)
    Для удаления лишних символов:
    Код:
    [^\d+]+
    И для строгой проверки:
    Код:
    ^((?:\+430?5|05)\d{8})$
    [​IMG]

    [​IMG]
     
    vipuncle, Bran и Support нравится это.
  3. Bran

    Bran A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    31 авг 2013
    Сообщения:
    32
    Симпатии:
    3
    Fofbidden, от души) Один из лучших продуктов на отечественном рынке. А поддержка так вообще выше всяких похвал:rolleyes:
     
    vipuncle и Forbidden нравится это.
  4. Fyn Oleg

    Fyn Oleg A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    21 апр 2015
    Сообщения:
    23
    Симпатии:
    7
    Прошу помочь разобраться. Подправил шаблон под себя..

    eyJwcmVzZXQiOiIoXHUwNDE4XHUwNDNkXHUwNDQyXHUwNDM1XHUwNDQwXHUwNDNk
    XHUwNDM1XHUwNDQyX1x1MDQzY1x1MDQzMFx1MDQzM1x1MDQzMFx1MDQzN1x1MDQz
    OFx1MDQzZFx1MDQ0YilfZW1haWxfcGhvbmVfMiIsInZhbHVlIjp7InByZXNldCI6
    IihcdTA0MThcdTA0M2RcdTA0NDJcdTA0MzVcdTA0NDBcdTA0M2RcdTA0MzVcdTA0
    NDJfXHUwNDNjXHUwNDMwXHUwNDMzXHUwNDMwXHUwNDM3XHUwNDM4XHUwNDNkXHUw
    NDRiKV9lbWFpbF9waG9uZV8yIiwicGFyc2VycyI6W1siTmV0OjpIVFRQIiwiZGVm
    YXVsdCIseyJ0eXBlIjoib3ZlcnJpZGUiLCJpZCI6InVzZXByb3h5IiwidmFsdWUi
    OmZhbHNlfSx7InR5cGUiOiJjdXN0b21SZXN1bHQiLCJyZXN1bHQiOiJkYXRhIiwi
    cmVnZXgiOiIoKD8+XFxiWy1hLXowLTkuXyUrXSspQFthLXowLTkuLV0rXFwuW2Et
    el17Miw2fSlcXGIiLCJyZWdleFR5cGUiOiJpZyIsInJlc3VsdFR5cGUiOiJhcnJh
    eSIsImFycmF5TmFtZSI6Im1haWxzIiwicmVzdWx0cyI6WyJtYWlsIl19LHsidHlw
    ZSI6ImN1c3RvbVJlc3VsdCIsInJlc3VsdCI6ImRhdGEiLCJyZWdleCI6Iig/Ol58
    W15cXGRdfDApKCg/OlxcKzN8WzEtOV18XFwoKVtcXGR8XFwtfFxcICgpXSspIiwi
    cmVnZXhUeXBlIjoiZyIsInJlc3VsdFR5cGUiOiJhcnJheSIsImFycmF5TmFtZSI6
    InBob25lcyIsInJlc3VsdHMiOlsicGhvbmUiXX0seyJ0eXBlIjoib3ZlcnJpZGUi
    LCJpZCI6ImZvcm1hdHJlc3VsdCIsInZhbHVlIjoiWyVcblx0Rk9SRUFDSCBpID0g
    WzAuLmRhdGFzLm1heF07XG4gICAgXHRxdWVyeS5vcmlnIF8gXCI7XCIgXyBcbiAg
    ICBcdG1haWxzLiRpLm1haWwgXyBcIjtcIiBfIFxuICAgICAgICBnb29kcGhvbmVz
    MS4kaS5waG9uZTEgXyBcIlxcblwiIElGIHBob25lMSAhPSAnbm9uZSc7XG5cdEVO
    RDtcbiVdIn1dXSwicmVzdWx0c0Zvcm1hdCI6IiRwMS5wcmVzZXQiLCJyZXN1bHRz
    U2F2ZVRvIjoiZmlsZSIsInJlc3VsdHNGaWxlTmFtZSI6IiRkYXRlZmlsZS5mb3Jt
    YXQoKS50eHQiLCJhZGRpdGlvbmFsRm9ybWF0cyI6W10sInJlc3VsdHNVbmlxdWUi
    OiJubyIsInF1ZXJ5Rm9ybWF0IjpbIiRxdWVyeSJdLCJ1bmlxdWVRdWVyaWVzIjpm
    YWxzZSwic2F2ZUZhaWxlZFF1ZXJpZXMiOmZhbHNlLCJpdGVyYXRvck9wdGlvbnMi
    Onsib25BbGxMZXZlbHMiOmZhbHNlLCJxdWVyeUJ1aWxkZXJzQWZ0ZXJJdGVyYXRv
    ciI6ZmFsc2UsInF1ZXJ5QnVpbGRlcnNPbkFsbExldmVscyI6ZmFsc2V9LCJyZXN1
    bHRzT3B0aW9ucyI6eyJvdmVyd3JpdGUiOmZhbHNlfSwiZG9Mb2ciOiJubyIsImtl
    ZXBVbmlxdWUiOiJObyIsIm1vcmVPcHRpb25zIjpmYWxzZSwicmVzdWx0c1ByZXBl
    bmQiOiIiLCJyZXN1bHRzQXBwZW5kIjoiIiwicXVlcnlCdWlsZGVycyI6W10sInJl
    c3VsdHNCdWlsZGVycyI6W3sic291cmNlIjpbMCxbIm1haWxzIiwibWFpbCJdXSwi
    dHlwZSI6ImxjIiwiYXJyYXkiOiJtYWlscyIsInRvIjoibWFpbCJ9LHsic291cmNl
    IjpbMCxbInBob25lcyIsInBob25lIl1dLCJ0eXBlIjoicmVnZXhSZXBsYWNlIiwi
    YXJyYXkiOiJwaG9uZXMxIiwicmVnZXgiOiJbXlxcZCtdKyIsInJlZ2V4VHlwZSI6
    ImciLCJyZXBsYWNlIjoiIiwidG8iOiJwaG9uZTEifSx7InNvdXJjZSI6WzAsWyJw
    aG9uZXMxIiwicGhvbmUxIl1dLCJ0eXBlIjoic3RyaW5nUmVwbGFjZSIsImFycmF5
    IjoicGhvbmVzMSIsInNlYXJjaCI6IikiLCJyZXBsYWNlIjoiIiwidG8iOiJwaG9u
    ZTEifSx7InNvdXJjZSI6WzAsWyJwaG9uZXMxIiwicGhvbmUxIl1dLCJ0eXBlIjoi
    c3RyaW5nUmVwbGFjZSIsImFycmF5IjoicGhvbmVzMSIsInNlYXJjaCI6IigiLCJy
    ZXBsYWNlIjoiIiwidG8iOiJwaG9uZTEifSx7InNvdXJjZSI6WzAsWyJwaG9uZXMx
    IiwicGhvbmUxIl1dLCJ0eXBlIjoicmVnZXgiLCJhcnJheSI6Imdvb2RwaG9uZXMx
    IiwicmVnZXgiOiJeKCg/OlxcKzM4PzV8MFswLTldKVxcZHs4fSkkIiwicmVnZXhU
    eXBlIjoiZyIsInRvIjpbInBob25lMSJdfV0sImNvbmZpZ092ZXJyaWRlcyI6W119
    fQ==

    Пытаюсь получить данные
    URL;e-mail;Телефон
    С первыми двумя проблем не возникло, а вот телефон в массиве вывода не могу получить.
    Данные в массиве:
    [​IMG]

    Если шаблон вывода имеет код

    [%
    FOREACH i = [0..datas.max];
    query.orig _ ";" _
    mails.$i.mail _ ";" _
    goodphones1.$i.phone1 _ "\n" IF phone1 != 'none';
    END;
    %]

    Тогда получаю:

    [​IMG]

    Сайт на котором тестировался пресет: _uzauto-gm.com.ua.
    А так же как объединить данные в массиве ( в случае если телефонов окажется несколько на странице)
    Спасибо!
     
  5. Support Денис

    Support Денис A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    12 июн 2017
    Сообщения:
    586
    Симпатии:
    185
    Здравствуйте.
    Попробуйте так.
    Код:
    [%
    FOREACH i = [0..datas.max];
       str = query.orig _ ";" _ mails.$i.mail _ ";" ;
        FOREACH item IN goodphones1;
               IF item.phone1 != 'none';
                      str = str _ item.phone1 _ ";";
                END;
         END;
      str _ "\n";
    END;
    %]
     
    Support и Fyn Oleg нравится это.
  6. Fyn Oleg

    Fyn Oleg A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    21 апр 2015
    Сообщения:
    23
    Симпатии:
    7
    Все работает, спасибо!
     
    Support Денис нравится это.

Поделиться этой страницей