fork download
  1. <?php
  2.  
  3.  
  4. /* Фун-я возвращает 1 если русских букв больше, 0 если если больше английских, false - если кол-во равно */
  5. function CheckRussian($word) {
  6. $sumOfEngChars = preg_match_all('/[eyopxac]/ui', $word); //кол-во англ. символов
  7. $sumOfRusChars = preg_match_all('/[еуорхас]/ui', $word); //кол-во русских символов
  8. if ($sumOfRusChars > $sumOfEngChars) {
  9. return 1;
  10. } elseif ($sumOfRusChars < $sumOfEngChars) {
  11. return 0;
  12. } else {
  13. return false;
  14. }
  15. }
  16. /* Фун-я выводит и исправляет опечатку: $word - слово, $language 1 - русское 0 - англ., $text - текст */
  17. function ShowAndFixMisprints($word, $language, &$text) {
  18. if ($language === 1) {
  19. $pattern = '/([а-яё-]*)([a-z]+)([а-яё-]*)/ui';
  20. $charsForSearch = ['/e/i','/y/i','/o/i','/p/i','/x/i','/a/i','/c/i']; // англ. символы
  21. $charsForReplace = ['е','у','о','р','х','а','с']; // русские символы
  22. } else {
  23. $pattern = '/([a-z-]*)([а-яё]+)([a-z-]*)/ui';
  24. $charsForSearch = ['/е/ui','/у/ui','/о/ui','/р/ui','/х/ui','/а/ui', '/с/ui']; //русские символы
  25. $charsForReplace = ['e','y','o','p','x','a', 'c']; // англ.символы
  26. }
  27. if (preg_match($pattern, $word)) {
  28. echo preg_replace($pattern, '$1[$2]$3', $word) . "\n";
  29. $fixedWord = preg_replace($charsForSearch, $charsForReplace, $word);
  30. $text = preg_replace("/{$word}/ui", $fixedWord, $text);
  31. }
  32. }
  33.  
  34. /* П[oc]т[a]вк[a], мя[ca], г[o]вядины, б[ec]костн[oe], B[ее]f, [c]а[x]ара, Ро[са] */
  35. $text = <<<EOF
  36. ОАО "Ляля"
  37. Пocтaвкa мяca гoвядины, бecкостнoe Aktobe Bееf для нужд государственного бюджетного учреждения и cаxара марки Роca
  38. для начальника сего учреждения
  39. На сумму: 6666 руб.
  40. EOF
  41. ;
  42.  
  43. echo "{$text}\n\n";
  44. $words = preg_split('/\s/', $text, 0, PREG_SPLIT_NO_EMPTY);
  45.  
  46. foreach ($words as $word) {
  47. $word = trim($word, ".,");
  48. if (preg_match('/[^a-zеуорхас]/ui', $word)) { // Если символ не относится к a-z и русск. е,у,о,р,х,а,с - т.е. он ы,ж,я.. то слово русское
  49. ShowAndFixMisprints($word, 1, $text);
  50. } elseif (preg_match('/[^а-яёeyopxac]/ui', $word)) { // Аналогично для англ. слова
  51. ShowAndFixMisprints($word, 0, $text);
  52. } elseif (CheckRussian($word) === 1) { // остались слова из англ. и русских букв е,у,о,р,х,а,с проверяем упрощенно,смотри ф-ю CheckRussian
  53. ShowAndFixMisprints($word, 1, $text);
  54. } elseif (CheckRussian($word) === 0) {
  55. ShowAndFixMisprints($word, 0, $text);
  56. } else {
  57. echo "В слове '{$word}' может быть опечатка! Проверьте вручную!\n";
  58. }
  59. }
  60.  
  61. echo "\n{$text}\n\n";
Success #stdin #stdout 0s 82624KB
stdin
Standard input is empty
stdout
ОАО "Ляля"
Пocтaвкa мяca гoвядины, бecкостнoe Aktobe Bееf для нужд государственного бюджетного учреждения и cаxара марки Роca
для начальника сего учреждения
На сумму: 6666 руб.

П[oc]т[a]вк[a]
мя[ca]
г[o]вядины
б[ec]костн[oe]
B[ее]f
[c]а[x]ара
В слове 'Роca' может быть опечатка! Проверьте вручную!

ОАО "Ляля"
Поставка мяса говядины, бескостное Aktobe Beef для нужд государственного бюджетного учреждения и сахара марки Роca
для начальника сего учреждения
На сумму: 6666 руб.