<?php

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

$regexp = '/^(8{1}[0-9]{10}$|'
        . '^\+{1}[0-9]{11})$|'
        . '^8-[0-9]{3}-[0-9]{1}-[0-9]{3}-[0-9]{3}$|'
        . '^\s8\s\([0-9]{4}\)\s[0-9]{2}-[0-9]{2}-[0-9]{2}$|'
        . '^8-[0-9]{3}-[0-9]{7}$|'
        . '^8\s\([0-9]{3}\)\s[0-9]{2}\s[0-9]{3}\s[0-9]{2}$|'
        . '^8-[0-9]{3}\s[0-9]{2}\s[0-9]{3}\s[0-9]{2}$|'
        . '^8\s\([0-9]{3}\)\s-\s[0-9]{3}\s-\s[0-9]{2}\s-\s[0-9]{2}$|'
        . '^\+\s7\s[0-9]{3}\s[0-9]{3}\s[0-9]{4}$|'
        . '^8\s\(\s[0-9]{3}\s\)\s[0-9]{7}$|'
        . '^8\([0-9]{3}\)[0-9]{3}-[0-9]{3}-[0-9]{2}$|'
        . '^8\s[0-9]{3}\s[0-9]{3}\s[0-9]{4}$/';

$correctNumber = array(
    '84951234567',
    '+74951234567',
    '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)599-555-22',
    '8 999 123 4567');
$wrongNumber = array(
    '02',
    '9+',
    '  ',
    'abcdefg',
    '84951234567 позвать люсю',
    '849512345',
    '849512345678',
    '8 (409) 123-123-123',
    '7900123467',
    '5005005001',
    '8888-8888-88',
    '84951a234567',
    '8495123456a',
    '+1 234 5678901',
    '+8 234 5678901',
    '7 234 5678901');
$matches = array();

echo "Верные номера. \n\n";

for ($i = 0; $i < count($correctNumber); $i ++) {
    if (preg_match($regexp, $correctNumber[$i], $matches)) {
        echo "[+] Номер \"{$correctNumber[$i]}\" записан верно. \n";
    } else {
        echo "[-] Номер \"{$correctNumber[$i]}\" записан не верно. \n";
    }
}

echo "\nНеверные номера. \n\n";

for ($i = 0; $i < count($wrongNumber); $i ++) {
    if (preg_match($regexp, $wrongNumber[$i], $matches)) {
        echo "[+] Номер \"{$wrongNumber[$i]}\" записан верно. \n";
    } else {
        echo "[-] Номер \"{$wrongNumber[$i]}\" записан не верно. \n";
    }
}