<?php
header('Content-type: text/html; charset=utf8');
$wright = 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 123 4567'
);
$wrong = array(
    '02',
    '84951234567 позвать люсю',
    '849512345',
    '849512345678',
    '8 (409) 123-123-123',
    '7900123467',
    '5005005001',
    '8888-8888-88',
    '84951a234567',
    '8495123456a',
    '+1 234 5678901',
    '+8 234 5678901',
    '7 234 5678901'
);

function checkRegExp($pattern, $examples){
    $count = count($examples);
    for($i = 0; $i < $count; $i++){
        if(preg_match($pattern, $examples[$i])){
            echo "строка \"{$examples[$i]}\" подходит \n";
        }else{
            echo "строка \"{$examples[$i]}\" не подходит \n";
        }
    }
}
$exp1 = '/^\s?(\+\s?7|8)([-\s\(\)]{0,4}\d){10}\s?$/';
checkRegExp($exp1, $wright);
checkRegExp($exp1, $wrong);