fork(1) download
  1. <?php
  2.  
  3. // в preg_replace можно использовать массивы, что бы не делать over9k циклов foreach
  4. $regExp = '/^\\W*(([+]\\s*7)|8)(\\W*[0-9]){10}\\W*$/ui'; //регулярка для правильного номера
  5. $pattern = array ('/\\W*/u', '/^8|^7/'); // массив из Р.В. для: 1) поиск \W 2) !!затем!! поиск 8 или 7 в начале строки
  6. $replacement = array ('','+7'); // чистим строку от мусора, а 8 (или 7) в начале, заменяем на +7
  7. $val; // операционная переменная
  8. $pureNumbers = array(); // массив куда сложим чистые номера
  9. $correctNumbers = array (
  10. '84951234567', '+74951234567', '8-495-1-234-567',
  11. ' 8 (8122) 56-56-56', '8-911-1234567', '8 (911) 12 345 67',
  12. '8-911 12 345 67', '8 (911) - 123 - 45 - 67', '+ 7 999 123 4567',
  13. '8 ( 999 ) 1234567', '8 999 123 4567'
  14. );
  15. foreach($correctNumbers as $value) { // перебираем номера
  16. if (preg_match($regExp, $value)) { // отделяем зерна от плевел, зерна подлежат обработке
  17. $val = preg_replace ($pattern, $replacement, $value); //чистим вилкой наш номер и приводим к одному виду
  18. $pureNumbers[] = $val; // записываем обработанный номер в массив
  19. }
  20. }
  21.  
  22. print_r($pureNumbers); //Ура!!!!
  23.  
  24.  
Success #stdin #stdout 0.02s 82944KB
stdin
Standard input is empty
stdout
Array
(
    [0] => +74951234567
    [1] => +74951234567
    [2] => +74951234567
    [3] => +78122565656
    [4] => +79111234567
    [5] => +79111234567
    [6] => +79111234567
    [7] => +79111234567
    [8] => +79991234567
    [9] => +79991234567
    [10] => +79991234567
)