@UserTrue
Когда искал по форуму, часто встречал ответы этого пользователя. Если найдется минутка, поделитесь опытом. Пока выделил два возможных решения замены curl http. Может есть еще варианты? Какой вариант для вас лучше?
Помогите с регуляркой для поиска телефонов
-
Помогите с регуляркой для поиска телефонов в исходном коде.
Номера начинаются с +7 или 8
имеют 10 цифр после кода страны
+79999379992
89999379992
999-93-79-992
999-937-99-92
999-93-799-92
(999)93-799-92
(999)93-79-992
(999)937-99-92
и те же комбинации с кодом страны^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$Нашел на просторах такую регулярку, но в БАС почему то не работает
-
@DrPrime said in Помогите с регуляркой для поиска телефонов:
@seedgg Спасибо, находил уже этот сайт, но почему то ни одна не работает в бас. Несколько возвращают только первую цифру, буду копаться дальше почему так
потому что там регулярки .NET формата, а нужны javascript.
-
@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" то это тоже примется , как моб тел.
Но этот момент можно убрать, если в регулярку начальную прописать все мобильные операторы РУ, а лучше не в регулярку, а просто в массив, а дальше обработанные результаты парсинга уже сверить , начинается ли номер с кода моб оператора, тогда будет очень мало не валидных номеров.плюс метода в том, что он спарсит номера во многих форматах, а дальше уже приведет в чистый цифровой формат.
но метод таки придуман сходу и на коленке, на твоем исходном примере, так что нужно проверять на реальных данных и смотреть чего не хватает..