fork download
  1. <?php
  2. $numbers = array(
  3. '84951234567',
  4. '+74951234567',
  5. '8-495-1-234-567',
  6. ' 8 (8122) 56-56-56',
  7. '8-911-1234567',
  8. '8 (911) 12 345 67',
  9. '8-911 12 345 67',
  10. '8 (911) - 123 - 45 - 67',
  11. '+ 7 999 123 4567',
  12. '8 ( 999 ) 1234567',
  13. '8 999 123 4567'
  14. );
  15.  
  16. $regular = '/^((\s)*8|\+(\s)*7)(( |-|\(|\)|_|)*[0-9]( |-|\(|\)|_|)*){9}[0-9]$/';
  17. $matches = preg_grep($regular, $numbers);
  18.  
  19. $regular = '/\+7/';
  20. $matches = preg_replace($regular, "8", $matches);
  21.  
  22. $regular = '/\D/';
  23. $matches = preg_replace($regular, "", $matches);
  24. print_r($matches);
  25. ?>
  26.  
  27. Тут то же самое, надо бы проверить на большом списке номеров.
  28. > $regular='/-|_|\)|\(| | /';
  29. Проще написать «заменить все не-цифры» чем перечислять возможные символы.
  30. Там даже есть конструкция \\D для этого.
Success #stdin #stdout 0.01s 20568KB
stdin
Standard input is empty
stdout
Array
(
    [0] => 84951234567
    [1] => 84951234567
    [2] => 84951234567
    [3] => 88122565656
    [4] => 89111234567
    [5] => 89111234567
    [6] => 89111234567
    [7] => 89111234567
    [8] => 79991234567
    [9] => 89991234567
    [10] => 89991234567
)

Тут то же самое, надо бы проверить на большом списке номеров.
> $regular='/-|_|\)|\(| | /';
Проще написать «заменить все не-цифры» чем перечислять возможные символы.
Там даже есть конструкция \\D для этого.