fork download
  1. <?php
  2.  
  3. $regexp = '/^(8|\+7|\\ 8 |\\+ 7)((-|\\(|\\)|\s)*[\d](-|\\(|\\)|\s)*){10}$/ui';
  4.  
  5. // Правильные:
  6. $correctNumbers = [
  7. '84951234567', '+74951234567', '8495-1-234-567',
  8. ' 8 (8122) 56-56-56', '8-911-1234567', '8 (911) 12 345 67',
  9. '8-911 12 345 67', '8 (911) - 123 - 45 - 67', '+ 7 999 123 4567',
  10. '8 ( 999 ) 1234567', '8 999 123 4567'
  11. ];
  12.  
  13. // Неправильные:
  14. $incorrectNumbers = [
  15. '02', '84951234567 позвать люсю', '849512345', '849512345678',
  16. '8 (409) 123-123-123', '7900123467', '5005005001', '8888-8888-88',
  17. '84951a234567', '8495123456a',
  18. '+1 234 5678901', /* неверный код страны */
  19. '+8 234 5678901', /* либо 8 либо +7 */
  20. '7 234 5678901' /* нет + */
  21. ];
  22.  
  23. foreach($correctNumbers as $el){
  24. $match = [];
  25. if(preg_match($regexp, $el, $match) > 0){
  26. echo "Правильный номер: {$match[0]}\n";
  27. }
  28. else{
  29. echo "Неправильный номер: {$el}\n";
  30. }
  31. }
Success #stdin #stdout 0.02s 24640KB
stdin
Standard input is empty
stdout
Правильный номер: 84951234567
Правильный номер: +74951234567
Правильный номер: 8495-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