fork(1) download
  1. /*На вход скрипта дан введенный пользователем номер телефона в виде 8-911-404-44-11 или +7(812)6786767 (
  2. в начале 8 или +7, потом идут 10 цифр и, возможно, какие-то символы). То есть, как и в прошлой задаче,
  3. человек вводит номер как хочет. Надо проверить номер на правильность и привести любой номер к единому
  4. формату 89114044411 (то есть, заменить +7 на 8 и выкинуть весь мусор вроде пробелов, скобок и минусов, кроме цифр)*/
  5. <?php
  6.  
  7. $correctNumbers = [
  8. '84951234567', '+74951234567', '8-495-1-234-567',
  9. ' 8 (8122) 56-56-56', '8-911-1234567', '8 (911) 12 345 67',
  10. '8-911 12 345 67', '8 (911) - 123 - 45 - 67', '+ 7 999 123 4567',
  11. '8 ( 999 ) 1234567', '8 999 123 4567'
  12. ];
  13.  
  14.  
  15. $incorrectNumbers = [
  16. '02', '84951234567 позвать люсю', '849512345', '849512345678',
  17. '8 (409) 123-123-123', '7900123467', '5005005001', '8888-8888-88',
  18. '84951a234567', '8495123456a',
  19. '+1 234 5678901', /* неверный код страны */
  20. '+8 234 5678901', /* либо 8 либо +7 */
  21. '7 234 5678901' /* нет + */
  22. ];
  23.  
  24. $regex = "/^\s*((\+\s*7)|8){1}(\W*\d){10}$/u";
  25.  
  26. echo "Correct numbers.\n";
  27. foreach ($correctNumbers as $correctNumber) {
  28. if (preg_match($regex, $correctNumber)) {
  29. echo "Regex is correct for $correctNumber!\n";
  30. $replaces = preg_replace("/^(\+\s*7)?/", "8", $correctNumber);
  31. $replaces = preg_replace("/\D/u", "", $replaces);
  32. echo $replaces . "\n";
  33. } else {
  34. echo "Regex doesn't work with $correctNumber.\n";
  35. }
  36. }
  37. echo "Incorrect numbers.\n";
  38. foreach ($incorrectNumbers as $incorrectNumber) {
  39. if (preg_match($regex, $incorrectNumber)) {
  40. echo "Regex is correct for this one!\n";
  41. } else {
  42. echo "Regex doesn't work with $incorrectNumber.\n";
  43. $replaces = preg_replace("/^(\+?\s*7)?/", "8", $incorrectNumber);
  44. $replaces = preg_replace("/\D/u", "", $replaces);
  45. echo $replaces . "\n";
  46. }
  47. }
Success #stdin #stdout 0.02s 82624KB
stdin
Standard input is empty
stdout
/*На вход скрипта дан введенный пользователем номер телефона в виде 8-911-404-44-11 или +7(812)6786767 (
в начале 8 или +7, потом идут 10 цифр и, возможно, какие-то символы). То есть, как и в прошлой задаче,
человек вводит номер как хочет. Надо проверить номер на правильность и привести любой номер к единому
формату 89114044411 (то есть, заменить +7 на 8 и выкинуть весь мусор вроде пробелов, скобок и минусов, кроме цифр)*/
Correct numbers.
Regex is correct for 84951234567!
884951234567
Regex is correct for +74951234567!
84951234567
Regex is correct for 8-495-1-234-567!
884951234567
Regex is correct for  8 (8122) 56-56-56!
888122565656
Regex is correct for 8-911-1234567!
889111234567
Regex is correct for 8 (911) 12 345 67!
889111234567
Regex is correct for 8-911 12 345 67!
889111234567
Regex is correct for 8 (911) - 123 - 45 - 67!
889111234567
Regex is correct for + 7 999 123 4567!
89991234567
Regex is correct for 8 ( 999 ) 1234567!
889991234567
Regex is correct for 8 999 123 4567!
889991234567
Incorrect numbers.
Regex doesn't work with 02.
802
Regex doesn't work with 84951234567 позвать люсю.
884951234567
Regex doesn't work with 849512345.
8849512345
Regex doesn't work with 849512345678.
8849512345678
Regex doesn't work with 8 (409) 123-123-123.
88409123123123
Regex doesn't work with 7900123467.
8900123467
Regex doesn't work with 5005005001.
85005005001
Regex doesn't work with 8888-8888-88.
88888888888
Regex doesn't work with 84951a234567.
884951234567
Regex doesn't work with 8495123456a.
88495123456
Regex doesn't work with +1 234 5678901.
812345678901
Regex doesn't work with +8 234 5678901.
882345678901
Regex doesn't work with 7 234 5678901.
82345678901