Помогите с регуляркой для поиска телефонов



  • @smurfik из 3 х млн



  • @DrPrime said in Помогите с регуляркой для поиска телефонов:

    @seedgg Спасибо, находил уже этот сайт, но почему то ни одна не работает в бас. Несколько возвращают только первую цифру, буду копаться дальше почему так

    потому что там регулярки .NET формата, а нужны javascript.



  • @DrPrime тогда опиши что и для чего ты делаешь, потому что понять теперь точно невозможно.



  • @out Можешь помочь с переделкой из под js?



  • @DrPrime я бы сделал так, это проще и надежнее, чем городить regexp под все варианты.
    в логе смотри [23:12:26] Поток №1 : Номеров найдено: 8
    [23:12:26] Поток №1 : ["79999379992","89999379992","9999379992","9999379992","9999379992","9999379992","9999379992","9999379992"]

    сделал такой говнокод, но рабочий

    var potential_phones = VAR_SAVED_CONTENT.match(/\+?(7|8)?[\d\-\(\)\ ]+/g);
    var valid_phones = [];
    
    if (potential_phones != null) {
      var tmpV;
      potential_phones.forEach(function(item, i, arr) {
        tmpV = potential_phones[i].match(/\d+/g);
        if (tmpV != null) {
          tmpV = tmpV.join("");
          if (tmpV.length > 9 && tmpV.length < 12) valid_phones.push(tmpV);
        }
      });  
    }
    
    if (valid_phones.length) {
      log("Номеров найдено: " + valid_phones.length);
      log(JSON.stringify(valid_phones));
    } else {
      log("Номера не найдены.");
    }
    

    0_1489958738664_dfjytjtj.xml

    сперва парсим все совпадения регуляркой \+?(7|8)?[\d\-\(\)\ ]+
    проходимся по всем совпадениям, берем одни только цифры, проверяем к-во цифр, если их от 10 до 11, то это моб телефон.

    так на вскидку, минус тут в том, что если в коде страницы будет просто "5555555555" то это тоже примется , как моб тел.
    Но этот момент можно убрать, если в регулярку начальную прописать все мобильные операторы РУ, а лучше не в регулярку, а просто в массив, а дальше обработанные результаты парсинга уже сверить , начинается ли номер с кода моб оператора, тогда будет очень мало не валидных номеров.

    плюс метода в том, что он спарсит номера во многих форматах, а дальше уже приведет в чистый цифровой формат.

    но метод таки придуман сходу и на коленке, на твоем исходном примере, так что нужно проверять на реальных данных и смотреть чего не хватает..



  • @out Спасибо
    Сделал похожим образом, чуть регулярку другую сделал.

    ((8|\+7)[- ]?[(]?\d{3}[)]?[- ]?[ ]?\d{1,3}[- ]?\d{1,3}[- ]?\d{1,3})
    

    А потом проверка всех по длине.
    Буде еще тестировать и твой вариант.



  • @DrPrime ок, только в моем коде измени на if (valid_phones.length) это я забыл. Пост отредактировал.



  • @out у меня похожая проблема.. только нужно пасить прокси со страницы .txt. с регуляркой что то не получилось у меня вообще. гет запрос, все одной строкой, просто получить текст через веб, тоже одной строкой. и хз как из 500 проксей взять один. длинна каждый раз разная, они обновляются вообщем на сайте нажимаешь посмотреть прокси, и открывается в новой вкладке страница с проксями. уже 3 часа сижу парюсь(



  • @smurfik вот пример с регуляркой, нормально со страницы парсит
    0_1490051197403_proxy.png

    Регулярка \d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}:\d{1,5}



  • @seedgg said in Помогите с регуляркой для поиска телефонов:

    \d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}:\d{1,5}

    СЕЙЧАС ПОПРОБУЮ, СПАСИБО



  • @seedgg said in Помогите с регуляркой для поиска телефонов:

    \d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}:\d{1,5}

    Спасибо огромное. работает. тоже сделал гет запрос и эта регулярка.



  • @smurfik точку лучше экранировать, без этого это не точка, а "любой символ". И порт вряд ли будет только с 1й цифрой.
    \b(\d{1,3}\.){3}\d{1,3}:\d{2,5}\b
    или
    (\d{1,3}\.){3}\d{1,3}:\d{2,5} зависит от ситуации, нужно прикладывать кусок исходного кода для примера.


  • administrators

    @DrPrime said in Помогите с регуляркой для поиска телефонов:

    Спасибо, находил уже этот сайт, но почему то ни одна не работает в бас. Несколько возвращают только первую цифру, буду копаться дальше почему так

    БАС возвращает первую группу(то что в скобках), или все віражение если групп нет, чтобы избежать этого нужно использовать группы без захвата (?:8|+7) вместо (8|+7) итд


Log in to reply
 

Looks like your connection to Bablosoft was lost, please wait while we try to reconnect.