<?php

error_reporting(-1);
header("Content-Type: text/plain; charset=utf-8");

/**
 * (\s?\+\s?7\s?|\s?8\s?) - +7 или 8 (с любым кол-вом пробелов между ними)
 * (\s*\(*-*\s*\d\s*-*\)*\s*){10} - Пробел-Скобочка-Тире-Пробел-ЦИФРА-Пробел-Тире-Скобочка-Пробел
 */

$regexp = '!^(\s?\+\s?7\s?|\s?8\s?)(\s*\(*-*\s*\d\s*-*\)*\s*){10}$!';

$correctNumber = array(
    '84951234567',
    '+74951234567',
    ' +74957654321',
    '8-495-1-234-567',
    ' 8 (8122) 56-56-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'
);

$wrongNumber = array(
    '02',
    '84951234567 позвать люсю',
    '849512345',
    '849512345678',
    '8 (409) 123-123-123',
    '7900123467',
    '5005005001',
    '8888-8888-88',
    '8888-8888-888888888888888888888888888888888888888888888888888888',
    '84951a234567',
    '8495123456a',
    '+1 234 5678901',
    '+8 234 5678901',
    '7 234 5678901'
);

echo "TRUE\n\n";

foreach ($correctNumber as $number) {
    if (preg_match($regexp, $number)) {
        echo "[+] \"{$number}\"\n";
    } else {
        echo "[-] \"{$number}\"\n";
    }
}

echo "\nFALSE\n\n";

foreach ($wrongNumber as $number) {
    if (preg_match($regexp, $number)) {
        echo "[+] \"{$number}\"\n";
    } else {
        echo "[-] \"{$number}\"\n";
    }
}
