Помогите с регуляркой для поиска телефонов
-
((8|+7)-?)?(?\d{3,5})?-?\d{1}-?\d{1}-?\d{1}-?\d{1}-?\d{1}((-?\d{1})?-?\d{1})? эта впринцыпе должна работать
-
@seedgg Спасибо, находил уже этот сайт, но почему то ни одна не работает в бас. Несколько возвращают только первую цифру, буду копаться дальше почему так
-
@DrPrime они и будут возвращать только одну цифру... потому что это очень геморная задача... сделай моим методом, и все будет хорошо. я не думаю что у тебя там список из 100 сайтов для парсинга
-
@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("Номера не найдены."); }
сперва парсим все совпадения регуляркой
\+?(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 вот пример с регуляркой, нормально со страницы парсит
Регулярка \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}
зависит от ситуации, нужно прикладывать кусок исходного кода для примера.
-
@DrPrime said in Помогите с регуляркой для поиска телефонов:
Спасибо, находил уже этот сайт, но почему то ни одна не работает в бас. Несколько возвращают только первую цифру, буду копаться дальше почему так
БАС возвращает первую группу(то что в скобках), или все віражение если групп нет, чтобы избежать этого нужно использовать группы без захвата
(?:8|+7)
вместо(8|+7)
итд