fork(1) download
  1. <?php
  2. // Правильные:
  3. $correctNumbers = array(
  4. '84951234567', '+74951234567', '8-495-1-234-567',
  5. ' 8 (8122) 56-56-56', '8-911-1234567', '8 (911) 12 345 67',
  6. '8-911 12 345 67', '8 (911) - 123 - 45 - 67', '+ 7 999 123 4567',
  7. '8 ( 999 ) 1234567', '8 999 123 4567'
  8. );
  9.  
  10. // Не правильные:
  11. $incorrectNumbers = array(
  12. '02', '84951234567 позвать люсю', '849512345', '849512345678',
  13. '8 (409) 123-123-123', '7900123467', '5005005001', '8888-8888-88',
  14. '84951a234567', '8495123456a',
  15. '+1 234 5678901', /* неверный код страны */
  16. '+8 234 5678901', /* либо 8 либо +7 */
  17. '7 234 5678901' /* нет + */
  18. );
  19.  
  20. // Отредактированные
  21. $correctNumbersEdited = array();
  22.  
  23. // Сначала идет +7 или 8, за ними ровно 10 цифр, между которыми может быть любое число скобок, минусов, пробелов
  24. $regexp = "/^\\s?([+]\\s?[7]|8)\\W*[0-9]\\W*[0-9]\\W*[0-9]\\W*[0-9]\\W*[0-9]\\W*[0-9]\\W*[0-9]\\W*[0-9]\\W*[0-9]\\W*[0-9]$/u";
  25.  
  26. // Чистим
  27. $regexpReplace1 = "/(\\D)/u";
  28. $regexpReplace2 = "/^7/u";
  29.  
  30. foreach ($correctNumbers as $e) {
  31.  
  32. if (preg_match($regexp, $e)) {
  33.  
  34. echo "Номер введен правильно\n";
  35. $e = preg_replace($regexpReplace1, "", $e);
  36. $correctNumbersEdited[] = preg_replace($regexpReplace2, "8", $e);
  37.  
  38. } else {
  39. echo "Номер введен НЕ правильно\n";
  40. }
  41. }
  42.  
  43. var_dump ($correctNumbersEdited);
  44. ?>
Success #stdin #stdout 0.02s 52432KB
stdin
Standard input is empty
stdout
Номер введен правильно
Номер введен правильно
Номер введен правильно
Номер введен правильно
Номер введен правильно
Номер введен правильно
Номер введен правильно
Номер введен правильно
Номер введен правильно
Номер введен правильно
Номер введен правильно
array(11) {
  [0]=>
  string(11) "84951234567"
  [1]=>
  string(11) "84951234567"
  [2]=>
  string(11) "84951234567"
  [3]=>
  string(11) "88122565656"
  [4]=>
  string(11) "89111234567"
  [5]=>
  string(11) "89111234567"
  [6]=>
  string(11) "89111234567"
  [7]=>
  string(11) "89111234567"
  [8]=>
  string(11) "89991234567"
  [9]=>
  string(11) "89991234567"
  [10]=>
  string(11) "89991234567"
}