fork(1) 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. '7 234((((( 5678901', /* не допускаются подряд идущие пробелы, скобки, дефисы */
  41. '8 (911( 12 345 67', /* несоответствие скобок */
  42. '8 (911 12 345 67', /* если есть открывающая скобка, то нужна закрывающая */
  43. '8 (911 12 345 67)', /* закрывающая скобка "не там" */
  44. ];
  45.  
  46.  
  47. // $regExp = '/^(\+\s?7|8)([\s\(\)-]*\d){10}$/';
  48. // $regExp = '/^(\+\s?7|8)\s?-?\s?\(?(\s?\d){3}\s?\)?(\s?-?\s?\d){7}$/';
  49. // $regExp = '/^(\+\s?7|8)\s?-?\s?\(?((\s?\d){3}|(\s?\d){4})\s?\)?(?(3)(\s?-?\s?\d){7}|(\s?-?\s?\d){6})$/';
  50. $regExp = '/^(\+\s?7|8)\s?-?\s?(\()?((\s?\d){3}|(\s?\d){4})\s?(?(2)\))(?(4)(\s?-?\s?\d){7}|(\s?-?\s?\d){6})$/';
  51.  
  52. foreach(array_merge($correctNumbers, $incorrectNumbers) as $number) {
  53. $number = trim($number);
  54. if (preg_match($regExp, $number)) {
  55. echo "Номер \"{$number}\" правильный.\n";
  56. } else {
  57. echo "Номер \"{$number}\" ошибочный.\n";
  58. }
  59. }
Success #stdin #stdout 0.02s 52480KB
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" ошибочный.
Номер "7 234((((( 5678901" ошибочный.
Номер "8 (911( 12 345 67" ошибочный.
Номер "8 (911 12 345 67" ошибочный.
Номер "8 (911 12 345 67)" ошибочный.