<?php
// Правильные:
$correctNumbers = [
'84951234567', '+74951234567', '8-495-1-234-567',
' 8 (8122) 56-56-56', ' 8 (81222) 56-6-56', '8-911-1234567', '8 (911) 12 345 67',
'8-911 12 345 67', '8 (911) - 123 - 45 - 67', '+ 7 999 123 4567',
'8 ( 999 ) 1234567', '8 999 123 4567'
];
// Неправильные:
$incorrectNumbers = [
'+7-(812)-567-55-67', '+7(-812)1234567', '+7(812-)1234567', '+7-(812)1234567', '+781(((2123)))))4567',
'02', '84951234567 позвать люсю', '849512345', '849512345678', '+74(95123)4567',
'8 (409) 123-123-123', '7900123467', '5005005001', '8888-8888-88',
'84951a234567', '8495123456a',
'+1 234 5678901', /* неверный код страны */
'+8 234 5678901', /* либо 8 либо +7 */
'7 234 5678901' /* нет + */
];
function checkPhoneNumber($phone) {
'@^(?:8|\+7) # матчим +7|8
-? # разрешаем дефис перед скобкой (но не после)
(\()? # открывающая скобка, которой может не быть
\d # первая цифра
(?:-?\d){2} # еще две цифры с опциональными дефисами спереди
(?(1) # если заматчена открывающая скобка
(?(?!\d-?\d?\)) # и если впереди нет 1-2 цифр с закрывающейся скобкой
(\)) # скобка должна быть прямо сейчас!
)
)
(?:-?\d) # четвертая цифра
(?(1) # если заматчена открывающая скобка
(?(2)| # и если скобки не было после третьей цифры
(?(?!\d\)) # и если скобки нет после пятой цифры
(\)) # скобка должна быть прямо сейчас!
)
)
)
(?:-?\d) # пятая цифра
(?(1) # если заматчена открывающая скобка
(?(2)| # и если скобки не было после третьей цифры
(?(3)| # и если скобки не было после четвертой цифры
\) # скобка должна быть прямо сейчас!
)
)
)
(?:-?\d){5} # и еще пять цифр с опциональными дефисами. кiнец.
$@x',
);
}
foreach (array_merge($correctNumbers, $incorrectNumbers) as $phoneNumber) { echo checkPhoneNumber($phoneNumber) ? $phoneNumber . " верный сын Аллаха\n" : $phoneNumber . " неверный кафир\n";
}
PD9waHAKCi8vINCf0YDQsNCy0LjQu9GM0L3Ri9C1OiAKJGNvcnJlY3ROdW1iZXJzID0gWyAKICAnODQ5NTEyMzQ1NjcnLCAgJys3NDk1MTIzNDU2NycsICc4LTQ5NS0xLTIzNC01NjcnLCAKICAnIDggKDgxMjIpIDU2LTU2LTU2JywgJyA4ICg4MTIyMikgNTYtNi01NicsICc4LTkxMS0xMjM0NTY3JywgJzggKDkxMSkgMTIgMzQ1IDY3JywgCiAgJzgtOTExIDEyIDM0NSA2NycsICc4ICg5MTEpIC0gMTIzIC0gNDUgLSA2NycsICcrIDcgOTk5IDEyMyA0NTY3JywgCiAgJzggKCA5OTkgKSAxMjM0NTY3JywgJzggOTk5IDEyMyA0NTY3JwpdOwoKLy8g0J3QtdC/0YDQsNCy0LjQu9GM0L3Ri9C1OiAKJGluY29ycmVjdE51bWJlcnMgPSBbCiAgJys3LSg4MTIpLTU2Ny01NS02NycsICcrNygtODEyKTEyMzQ1NjcnLCAnKzcoODEyLSkxMjM0NTY3JywgJys3LSg4MTIpMTIzNDU2NycsICcrNzgxKCgoMjEyMykpKSkpNDU2NycsIAogICcwMicsICc4NDk1MTIzNDU2NyDQv9C+0LfQstCw0YLRjCDQu9GO0YHRjicsICc4NDk1MTIzNDUnLCAnODQ5NTEyMzQ1Njc4JywgJys3NCg5NTEyMyk0NTY3JywKICAnOCAoNDA5KSAxMjMtMTIzLTEyMycsICc3OTAwMTIzNDY3JywgJzUwMDUwMDUwMDEnLCAnODg4OC04ODg4LTg4JywKICAnODQ5NTFhMjM0NTY3JywgJzg0OTUxMjM0NTZhJywgCiAgJysxIDIzNCA1Njc4OTAxJywgLyog0L3QtdCy0LXRgNC90YvQuSDQutC+0LQg0YHRgtGA0LDQvdGLICovCiAgJys4IDIzNCA1Njc4OTAxJywgLyog0LvQuNCx0L4gOCDQu9C40LHQviArNyAqLwogICc3IDIzNCA1Njc4OTAxJyAvKiDQvdC10YIgKyAqLwpdOwoKZnVuY3Rpb24gY2hlY2tQaG9uZU51bWJlcigkcGhvbmUpIHsKCQkKCXJldHVybiBwcmVnX21hdGNoKAoJCSdAXig/Ojh8XCs3KSAgICAgICAgICAgICMg0LzQsNGC0YfQuNC8ICs3fDgKCQktPyAgICAgICAgICAgICAgICAgICAgICAjINGA0LDQt9GA0LXRiNCw0LXQvCDQtNC10YTQuNGBINC/0LXRgNC10LQg0YHQutC+0LHQutC+0LkgKNC90L4g0L3QtSDQv9C+0YHQu9C1KQoJCShcKCk/ICAgICAgICAgICAgICAgICAgICMg0L7RgtC60YDRi9Cy0LDRjtGJ0LDRjyDRgdC60L7QsdC60LAsINC60L7RgtC+0YDQvtC5INC80L7QttC10YIg0L3QtSDQsdGL0YLRjAoJCVxkICAgICAgICAgICAgICAgICAgICAgICMg0L/QtdGA0LLQsNGPINGG0LjRhNGA0LAKCQkoPzotP1xkKXsyfSAgICAgICAgICAgICAjINC10YnQtSDQtNCy0LUg0YbQuNGE0YDRiyDRgSDQvtC/0YbQuNC+0L3QsNC70YzQvdGL0LzQuCDQtNC10YTQuNGB0LDQvNC4INGB0L/QtdGA0LXQtNC4CgkJKD8oMSkgICAgICAgICAgICAgICAgICAgIyDQtdGB0LvQuCDQt9Cw0LzQsNGC0YfQtdC90LAg0L7RgtC60YDRi9Cy0LDRjtGJ0LDRjyDRgdC60L7QsdC60LAKCQkgICAgKD8oPyFcZC0/XGQ/XCkpICAgICAjINC4INC10YHQu9C4INCy0L/QtdGA0LXQtNC4INC90LXRgiAxLTIg0YbQuNGE0YAg0YEg0LfQsNC60YDRi9Cy0LDRjtGJ0LXQudGB0Y8g0YHQutC+0LHQutC+0LkKCQkgICAgICAgIChcKSkgICAgICAgICAgICAjINGB0LrQvtCx0LrQsCDQtNC+0LvQttC90LAg0LHRi9GC0Ywg0L/RgNGP0LzQviDRgdC10LnRh9Cw0YEhCgkJICAgICkKCQkpCgkJKD86LT9cZCkgICAgICAgICAgICAgICAgIyDRh9C10YLQstC10YDRgtCw0Y8g0YbQuNGE0YDQsAoJCSg/KDEpICAgICAgICAgICAgICAgICAgICMg0LXRgdC70Lgg0LfQsNC80LDRgtGH0LXQvdCwINC+0YLQutGA0YvQstCw0Y7RidCw0Y8g0YHQutC+0LHQutCwCgkJICAgICg/KDIpfCAgICAgICAgICAgICAgIyDQuCDQtdGB0LvQuCDRgdC60L7QsdC60Lgg0L3QtSDQsdGL0LvQviDQv9C+0YHQu9C1INGC0YDQtdGC0YzQtdC5INGG0LjRhNGA0YsKCQkgICAgICAgICg/KD8hXGRcKSkgICAgICAjINC4INC10YHQu9C4INGB0LrQvtCx0LrQuCDQvdC10YIg0L/QvtGB0LvQtSDQv9GP0YLQvtC5INGG0LjRhNGA0YsKCQkgICAgICAgICAgICAoXCkpICAgICAgICAjINGB0LrQvtCx0LrQsCDQtNC+0LvQttC90LAg0LHRi9GC0Ywg0L/RgNGP0LzQviDRgdC10LnRh9Cw0YEhCgkJICAgICAgICApCgkJICAgICApCgkJKQoJCSg/Oi0/XGQpICAgICAgICAgICAgICAgICMg0L/Rj9GC0LDRjyDRhtC40YTRgNCwCgkJKD8oMSkgICAgICAgICAgICAgICAgICAgIyDQtdGB0LvQuCDQt9Cw0LzQsNGC0YfQtdC90LAg0L7RgtC60YDRi9Cy0LDRjtGJ0LDRjyDRgdC60L7QsdC60LAKCQkgICAgKD8oMil8ICAgICAgICAgICAgICAjINC4INC10YHQu9C4INGB0LrQvtCx0LrQuCDQvdC1INCx0YvQu9C+INC/0L7RgdC70LUg0YLRgNC10YLRjNC10Lkg0YbQuNGE0YDRiwoJCSAgICAgICAgKD8oMyl8ICAgICAgICAgICMg0Lgg0LXRgdC70Lgg0YHQutC+0LHQutC4INC90LUg0LHRi9C70L4g0L/QvtGB0LvQtSDRh9C10YLQstC10YDRgtC+0Lkg0YbQuNGE0YDRiwoJCSAgICAgICAgICAgIFwpICAgICAgICAgICMg0YHQutC+0LHQutCwINC00L7Qu9C20L3QsCDQsdGL0YLRjCDQv9GA0Y/QvNC+INGB0LXQudGH0LDRgSEgICAKCQkgICAgICAgICkKCQkgICAgKQoJCSkKCQkoPzotP1xkKXs1fSAgICAgICAgICAgICAjINC4INC10YnQtSDQv9GP0YLRjCDRhtC40YTRgCDRgSDQvtC/0YbQuNC+0L3QsNC70YzQvdGL0LzQuCDQtNC10YTQuNGB0LDQvNC4LiDQumnQvdC10YYuCgkJJEB4JywKCQlzdHJfcmVwbGFjZSgnICcsICcnLCAkcGhvbmUpCgkpOwkKCQp9Cgpmb3JlYWNoIChhcnJheV9tZXJnZSgkY29ycmVjdE51bWJlcnMsICRpbmNvcnJlY3ROdW1iZXJzKSBhcyAkcGhvbmVOdW1iZXIpIHsKCWVjaG8gY2hlY2tQaG9uZU51bWJlcigkcGhvbmVOdW1iZXIpID8gJHBob25lTnVtYmVyIC4gIiDQstC10YDQvdGL0Lkg0YHRi9C9INCQ0LvQu9Cw0YXQsFxuIiA6ICRwaG9uZU51bWJlciAuICIg0L3QtdCy0LXRgNC90YvQuSDQutCw0YTQuNGAXG4iOwp9