<?php
// Требуется написать регулярку, которая будет пропускать через
// себя телефонные номера в формате 88005553535, в т.ч. с пробелами
// и тире, скобочками и без них.
// Сначала делаем список номеров, который будем гонять через регулярку.
"88005553535", // Ok;
"8(801)555(35)35", // Ok;
"8-802-555-35-35", // Ok;
"8(803)(555)(35)(35)", // Ok;
"8-(804)-(555)-(35)-(35)", // Ok;
"8 805 555 35 35", // Ok;
"---(8)---(8)(0)(6)---(5)(5)(5)---(3)(5)---(3)(5)---", // Как бы странно не казалось, но ок.
"8807", // Неверно, т.к. длина номера < 10 цифр;
"88085553535555", // Неверно, т.к. длина номера > 10 цифр;
"8809555aaaa", // Неверно, т.к. присутстует латиница;
"FooBar"// Также неверно.
); // Итого 11 номеров, из которых 7 верных.
$regexp = "/[-()\\s]*([0-9][-()\\s]*){11}/";
// Сначала возможно встретится один из символов [-()] или пробел, сколько угодно раз,
// затем обязательно одиннацать блоков, состоящие из одной цифры [0-9],
// и возможно еще из символов [-()] (и пробела), сколько угодно раз.
// Вообще т.к. нам не нужны тут буквы, то и регистр, и кодировка оных
// нам не важна, и флаги 'ui' не нужны.
// P.s. Для России упростить на '8' или '+7' в начале, и десять блоков.
$rightPhones = []; // Создаем пустой массив для правильных номеров;
$wrongPhones = []; // И для неправильных;
foreach(PHONES as $phone){
$match = []; // Создаем пустой массив для записи туда номера через preg_match;
if (preg_match($regexp, $phone, $match)){ // Если номер пройдет через регулярку, то будет записан в $match[0]; $rightPhones[] = $match[0]; // И добавлен в массив с правильными номерами;
}
else
$wrongPhones[] = $phone; // Иначе же добавляем номер в массив с неправильными;
}
echo "Правильные номера: \n"; // Выводим список правильных номеров;
foreach($rightPhones as $phone){ // Используя для этого поэлементный проход массива через foreach();
echo "$phone \n";
}
echo "Неправильные номера: \n"; // И так же для неправильных;
foreach($wrongPhones as $phone){
echo "$phone \n";
}
// TODO:
// 1. Реализовать вывод данных массива не поэлементным проходом,
// а каким-нибудь var_dump(), чтобы не плодить лишних переменных.
// Ну и изучить форматированный вывод данных.
// 2. Реализовать перевод данных из массива в удобочитаемый вид
// "88005553535" - т.е. нужно будет убрать весь мусор из строки.
PD9waHAKCi8vINCi0YDQtdCx0YPQtdGC0YHRjyDQvdCw0L/QuNGB0LDRgtGMINGA0LXQs9GD0LvRj9GA0LrRgywg0LrQvtGC0L7RgNCw0Y8g0LHRg9C00LXRgiDQv9GA0L7Qv9GD0YHQutCw0YLRjCDRh9C10YDQtdC3Ci8vINGB0LXQsdGPINGC0LXQu9C10YTQvtC90L3Ri9C1INC90L7QvNC10YDQsCDQsiDRhNC+0YDQvNCw0YLQtSA4ODAwNTU1MzUzNSwg0LIg0YIu0YcuINGBINC/0YDQvtCx0LXQu9Cw0LzQuAovLyDQuCDRgtC40YDQtSwg0YHQutC+0LHQvtGH0LrQsNC80Lgg0Lgg0LHQtdC3INC90LjRhS4KCi8vINCh0L3QsNGH0LDQu9CwINC00LXQu9Cw0LXQvCDRgdC/0LjRgdC+0Log0L3QvtC80LXRgNC+0LIsINC60L7RgtC+0YDRi9C5INCx0YPQtNC10Lwg0LPQvtC90Y/RgtGMINGH0LXRgNC10Lcg0YDQtdCz0YPQu9GP0YDQutGDLgpjb25zdCBQSE9ORVMgPSBhcnJheSgKICAgICI4ODAwNTU1MzUzNSIsIC8vIE9rOwogICAgIjgoODAxKTU1NSgzNSkzNSIsIC8vIE9rOwogICAgIjgtODAyLTU1NS0zNS0zNSIsIC8vIE9rOwogICAgIjgoODAzKSg1NTUpKDM1KSgzNSkiLCAvLyBPazsKICAgICI4LSg4MDQpLSg1NTUpLSgzNSktKDM1KSIsIC8vIE9rOwogICAgIjggODA1IDU1NSAzNSAzNSIsIC8vIE9rOwogICAgIi0tLSg4KS0tLSg4KSgwKSg2KS0tLSg1KSg1KSg1KS0tLSgzKSg1KS0tLSgzKSg1KS0tLSIsIC8vINCa0LDQuiDQsdGLINGB0YLRgNCw0L3QvdC+INC90LUg0LrQsNC30LDQu9C+0YHRjCwg0L3QviDQvtC6LgogICAgIjg4MDciLCAvLyDQndC10LLQtdGA0L3Qviwg0YIu0LouINC00LvQuNC90LAg0L3QvtC80LXRgNCwIDwgMTAg0YbQuNGE0YA7CiAgICAiODgwODU1NTM1MzU1NTUiLCAvLyDQndC10LLQtdGA0L3Qviwg0YIu0LouINC00LvQuNC90LAg0L3QvtC80LXRgNCwID4gMTAg0YbQuNGE0YA7CiAgICAiODgwOTU1NWFhYWEiLCAvLyDQndC10LLQtdGA0L3Qviwg0YIu0LouINC/0YDQuNGB0YPRgtGB0YLRg9C10YIg0LvQsNGC0LjQvdC40YbQsDsKICAgICJGb29CYXIiLy8g0KLQsNC60LbQtSDQvdC10LLQtdGA0L3Qvi4KKTsgLy8g0JjRgtC+0LPQviAxMSDQvdC+0LzQtdGA0L7Qsiwg0LjQtyDQutC+0YLQvtGA0YvRhSA3INCy0LXRgNC90YvRhS4KCmVycm9yX3JlcG9ydGluZygtMSk7CgokcmVnZXhwID0gIi9bLSgpXFxzXSooWzAtOV1bLSgpXFxzXSopezExfS8iOwovLyDQodC90LDRh9Cw0LvQsCDQstC+0LfQvNC+0LbQvdC+INCy0YHRgtGA0LXRgtC40YLRgdGPINC+0LTQuNC9INC40Lcg0YHQuNC80LLQvtC70L7QsiBbLSgpXSDQuNC70Lgg0L/RgNC+0LHQtdC7LCDRgdC60L7Qu9GM0LrQviDRg9Cz0L7QtNC90L4g0YDQsNC3LAovLyDQt9Cw0YLQtdC8INC+0LHRj9C30LDRgtC10LvRjNC90L4g0L7QtNC40L3QvdCw0YbQsNGC0Ywg0LHQu9C+0LrQvtCyLCDRgdC+0YHRgtC+0Y/RidC40LUg0LjQtyDQvtC00L3QvtC5INGG0LjRhNGA0YsgWzAtOV0sCi8vINC4INCy0L7Qt9C80L7QttC90L4g0LXRidC1INC40Lcg0YHQuNC80LLQvtC70L7QsiBbLSgpXSAo0Lgg0L/RgNC+0LHQtdC70LApLCDRgdC60L7Qu9GM0LrQviDRg9Cz0L7QtNC90L4g0YDQsNC3LgovLyDQktC+0L7QsdGJ0LUg0YIu0LouINC90LDQvCDQvdC1INC90YPQttC90Ysg0YLRg9GCINCx0YPQutCy0YssINGC0L4g0Lgg0YDQtdCz0LjRgdGC0YAsINC4INC60L7QtNC40YDQvtCy0LrQsCDQvtC90YvRhQovLyDQvdCw0Lwg0L3QtSDQstCw0LbQvdCwLCDQuCDRhNC70LDQs9C4ICd1aScg0L3QtSDQvdGD0LbQvdGLLgovLyBQLnMuINCU0LvRjyDQoNC+0YHRgdC40Lgg0YPQv9GA0L7RgdGC0LjRgtGMINC90LAgJzgnINC40LvQuCAnKzcnINCyINC90LDRh9Cw0LvQtSwg0Lgg0LTQtdGB0Y/RgtGMINCx0LvQvtC60L7Qsi4KCiRyaWdodFBob25lcyA9IFtdOyAvLyDQodC+0LfQtNCw0LXQvCDQv9GD0YHRgtC+0Lkg0LzQsNGB0YHQuNCyINC00LvRjyDQv9GA0LDQstC40LvRjNC90YvRhSDQvdC+0LzQtdGA0L7QsjsKJHdyb25nUGhvbmVzID0gW107IC8vINCYINC00LvRjyDQvdC10L/RgNCw0LLQuNC70YzQvdGL0YU7Cgpmb3JlYWNoKFBIT05FUyBhcyAkcGhvbmUpewogICAgJG1hdGNoID0gW107IC8vINCh0L7Qt9C00LDQtdC8INC/0YPRgdGC0L7QuSDQvNCw0YHRgdC40LIg0LTQu9GPINC30LDQv9C40YHQuCDRgtGD0LTQsCDQvdC+0LzQtdGA0LAg0YfQtdGA0LXQtyBwcmVnX21hdGNoOwogICAgaWYgKHByZWdfbWF0Y2goJHJlZ2V4cCwgJHBob25lLCAkbWF0Y2gpKXsgLy8g0JXRgdC70Lgg0L3QvtC80LXRgCDQv9GA0L7QudC00LXRgiDRh9C10YDQtdC3INGA0LXQs9GD0LvRj9GA0LrRgywg0YLQviDQsdGD0LTQtdGCINC30LDQv9C40YHQsNC9INCyICRtYXRjaFswXTsKICAgICAgICAkcmlnaHRQaG9uZXNbXSA9ICRtYXRjaFswXTsgLy8g0Jgg0LTQvtCx0LDQstC70LXQvSDQsiDQvNCw0YHRgdC40LIg0YEg0L/RgNCw0LLQuNC70YzQvdGL0LzQuCDQvdC+0LzQtdGA0LDQvNC4OwogICAgfQogICAgZWxzZQogICAgICAgICR3cm9uZ1Bob25lc1tdID0gJHBob25lOyAvLyDQmNC90LDRh9C1INC20LUg0LTQvtCx0LDQstC70Y/QtdC8INC90L7QvNC10YAg0LIg0LzQsNGB0YHQuNCyINGBINC90LXQv9GA0LDQstC40LvRjNC90YvQvNC4Owp9CgplY2hvICLQn9GA0LDQstC40LvRjNC90YvQtSDQvdC+0LzQtdGA0LA6IFxuIjsgLy8g0JLRi9Cy0L7QtNC40Lwg0YHQv9C40YHQvtC6INC/0YDQsNCy0LjQu9GM0L3Ri9GFINC90L7QvNC10YDQvtCyOwpmb3JlYWNoKCRyaWdodFBob25lcyBhcyAkcGhvbmUpeyAvLyDQmNGB0L/QvtC70YzQt9GD0Y8g0LTQu9GPINGN0YLQvtCz0L4g0L/QvtGN0LvQtdC80LXQvdGC0L3Ri9C5INC/0YDQvtGF0L7QtCDQvNCw0YHRgdC40LLQsCDRh9C10YDQtdC3IGZvcmVhY2goKTsKICAgIGVjaG8gIiRwaG9uZSBcbiI7Cn0KCmVjaG8gItCd0LXQv9GA0LDQstC40LvRjNC90YvQtSDQvdC+0LzQtdGA0LA6IFxuIjsgLy8g0Jgg0YLQsNC6INC20LUg0LTQu9GPINC90LXQv9GA0LDQstC40LvRjNC90YvRhTsKZm9yZWFjaCgkd3JvbmdQaG9uZXMgYXMgJHBob25lKXsKICAgIGVjaG8gIiRwaG9uZSBcbiI7Cn0KCi8vIFRPRE86Ci8vIDEuINCg0LXQsNC70LjQt9C+0LLQsNGC0Ywg0LLRi9Cy0L7QtCDQtNCw0L3QvdGL0YUg0LzQsNGB0YHQuNCy0LAg0L3QtSDQv9C+0Y3Qu9C10LzQtdC90YLQvdGL0Lwg0L/RgNC+0YXQvtC00L7QvCwKLy8g0LAg0LrQsNC60LjQvC3QvdC40LHRg9C00YwgdmFyX2R1bXAoKSwg0YfRgtC+0LHRiyDQvdC1INC/0LvQvtC00LjRgtGMINC70LjRiNC90LjRhSDQv9C10YDQtdC80LXQvdC90YvRhS4KLy8g0J3RgyDQuCDQuNC30YPRh9C40YLRjCDRhNC+0YDQvNCw0YLQuNGA0L7QstCw0L3QvdGL0Lkg0LLRi9Cy0L7QtCDQtNCw0L3QvdGL0YUuCi8vIDIuINCg0LXQsNC70LjQt9C+0LLQsNGC0Ywg0L/QtdGA0LXQstC+0LQg0LTQsNC90L3Ri9GFINC40Lcg0LzQsNGB0YHQuNCy0LAg0LIg0YPQtNC+0LHQvtGH0LjRgtCw0LXQvNGL0Lkg0LLQuNC0Ci8vICI4ODAwNTU1MzUzNSIgLSDRgi7QtS4g0L3Rg9C20L3QviDQsdGD0LTQtdGCINGD0LHRgNCw0YLRjCDQstC10YHRjCDQvNGD0YHQvtGAINC40Lcg0YHRgtGA0L7QutC4Lg==