fork(2) download
  1. <?php
  2. /* Дан текст, который по идее должен быть номером телефона в виде 8-(911)-506 56 56
  3. (т.е. человек может ввести не только цифры, но и скобки, минусы, может что-то еще).
  4. Но в реальности, пользователь может вместо номера написать что угодно.
  5. Напиши скрипт для проверки правильности введенного номера («8(911)-506 56 56» —
  6. правильный номер, «8-911-50-656-56» — правильный, «89115065656» — правильный,
  7. «02» — неправильный, «89115065656 позвать Люду» — неправильный).*/
  8.  
  9. // Правильные:
  10. $correctNumbers = [
  11. '84951234567',
  12. '+74951234567',
  13. '8-495-1-234-567',
  14. ' 8 (8122) 56-56-56',
  15. '8-911-1234567',
  16. '8 (911) 12 345 67',
  17. '8-911 12 345 67',
  18. '8 (911) - 123 - 45 - 67',
  19. '+ 7 999 123 4567',
  20. '8 ( 999 ) 1234567',
  21. '8 999 123 4567'
  22. ];
  23.  
  24. // Неправильные:
  25. $incorrectNumbers = [
  26. '02',
  27. '84951234567 позвать люсю',
  28. '849512345',
  29. '849512345678',
  30. '8 (409) 123-123-123',
  31. '7900123467',
  32. '5005005001',
  33. '8888-8888-88',
  34. '84951a234567',
  35. '8495123456a',
  36. '+1 234 5678901', /* неверный код страны */
  37. '+8 234 5678901', /* либо 8 либо +7 */
  38. '7 234 5678901' /* нет + */
  39. ];
  40.  
  41.  
  42. $regExp = '/^(\+\s?7|8)([\s\(\)-]*\d){10}$/';
  43. foreach(array_merge($correctNumbers, $incorrectNumbers) as $number) {
  44. $number = trim($number);
  45. if (preg_match($regExp, $number)) {
  46. echo "Номер \"{$number}\" правильный.\n";
  47. } else {
  48. echo "Номер \"{$number}\" ошибочный.\n";
  49. }
  50. }
Success #stdin #stdout 0.02s 52472KB
stdin
Standard input is empty
stdout
Номер "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" ошибочный.
Номер "7 234 5678901" ошибочный.