<?php

error_reporting(-1);

$regexp = '/^((\\+\\s*7)|(\s*[8]\\s*\\-*))(\\)*\\(*\\-*\\s*[0-9]\\)*\\(*\\-*\\s*){10}$/';

$patterns = array();
$patterns[0] = '/(\\-|\\s|\\(|\\)|)/';
$patterns[1] = '/(\\+\\s*7)/';

$replacements = array();
$replacements[0] = '';
$replacements[1] = '8';

$numbers = [
  '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',
  '02',
  '84951234567 позвать люсю',
  '849512345',
  '849512345678',
  '8 (409) 123-123-123',
  '7900123467',
  '5005005001',
  '8888-8888-88',
  '84951a234567',
  '8495123456a',
  '+1 234 5678901', /* неверный код страны */
  '+8 234 5678901', /* либо 8 либо +7 */
  '7 234 5678901' /* нет + */
];

foreach ($numbers as $number) {
    if (preg_match($regexp, $number)) {
        echo "Номер приведен в корректный вид - ";
        echo preg_replace($patterns, $replacements, $number);
        echo " | Старый вид - {$number}\n";
    } else {
        echo "Номер вверден не верно - {$number}\n";
    }
}