<?php
/* Фун-я возвращает 1 если русских букв больше, 0 если если больше английских, false - если кол-во равно */
function CheckRussian( $word ) {
$sumOfEngChars = preg_match_all ( '/[eyopxac]/ui' , $word ) ; //кол-во англ. символов $sumOfRusChars = preg_match_all ( '/[еуорхас]/ui' , $word ) ; //кол-во русских символов if ( $sumOfRusChars > $sumOfEngChars ) {
return 1 ;
} if ( $sumOfRusChars < $sumOfEngChars ) {
return 0 ;
} else {
return false ;
}
}
/* Фун-я выводит и исправляет опечатку: $word - слово, $language 1 - русское 0 - англ., $text - текст */
function ShowAndFixMisprints( $word , $language , & $text ) {
if ( $language === 1 ) {
$pattern = '/([а-яё-]*)([a-z]+)([а-яё-]*)/ui' ;
$charsForSearch = [ '/e/i' , '/y/i' , '/o/i' , '/p/i' , '/x/i' , '/a/i' , '/c/i' ] ; // англ. символы
$charsForReplace = [ 'е' , 'у' , 'о' , 'р' , 'х' , 'а' , 'с' ] ; // русские символы
} else {
$pattern = '/([a-z-]*)([а-яё]+)([a-z-]*)/ui' ;
$charsForSearch = [ '/е/ui' , '/у/ui' , '/о/ui' , '/р/ui' , '/х/ui' , '/а/ui' , '/с/ui' ] ; //русские символы
$charsForReplace = [ 'e' , 'y' , 'o' , 'p' , 'x' , 'a' , 'c' ] ; // англ.символы
}
$fixedWord = preg_replace ( $charsForSearch , $charsForReplace , $word ) ; }
}
/* П[oc]т[a]вк[a], мя[ca], г[o]вядины, б[ec]костн[oe], B[ее]f, [c]а[x]ара, Ро[са] */
$text = <<<EOF
ОАО "Ляля"
Пocтaвкa мяca гoвядины, бecкостнoe Aktobe Bееf для нужд государственного бюджетного учреждения и cаxара марки Роca
для начальника сего учреждения
На сумму: 6666 руб.
EOF
;
echo "{$text} \n \n " ;
$words = preg_split ( '/\s/' , $text , 0 , PREG_SPLIT_NO_EMPTY
) ;
foreach ( $words as $word ) {
$word = trim ( $word , ".," ) ; if ( preg_match ( '/[^a-zеуорхас]/ui' , $word ) ) { // Если символ не относится к a-z и русск. е,у,о,р,х,а,с - т.е. он ы,ж,я.. то слово русское ShowAndFixMisprints( $word , 1 , $text ) ;
} elseif ( preg_match ( '/[^а-яёeyopxac]/ui' , $word ) ) { // Аналогично для англ. слова ShowAndFixMisprints( $word , 0 , $text ) ;
} elseif ( CheckRussian( $word ) === 1 ) { // остались слова из англ. и русских букв е,у,о,р,х,а,с проверяем упрощенно,смотри ф-ю CheckRussian
ShowAndFixMisprints( $word , 1 , $text ) ;
} elseif ( CheckRussian( $word ) === 0 ) {
ShowAndFixMisprints( $word , 0 , $text ) ;
} else {
echo "В слове '{$word} ' может быть опечатка! Проверьте вручную!\n " ;
}
}
echo "\n {$text} \n \n " ;
PD9waHAKCmVycm9yX3JlcG9ydGluZygtMSk7CgovKiDQpNGD0L0t0Y8g0LLQvtC30LLRgNCw0YnQsNC10YIgMSDQtdGB0LvQuCDRgNGD0YHRgdC60LjRhSDQsdGD0LrQsiDQsdC+0LvRjNGI0LUsIDAg0LXRgdC70Lgg0LXRgdC70Lgg0LHQvtC70YzRiNC1INCw0L3Qs9C70LjQudGB0LrQuNGFLCBmYWxzZSAtINC10YHQu9C4INC60L7Quy3QstC+INGA0LDQstC90L4gKi8KZnVuY3Rpb24gQ2hlY2tSdXNzaWFuKCR3b3JkKSB7Cgkkc3VtT2ZFbmdDaGFycyA9IHByZWdfbWF0Y2hfYWxsKCcvW2V5b3B4YWNdL3VpJywgJHdvcmQpOyAvL9C60L7Quy3QstC+INCw0L3Qs9C7LiDRgdC40LzQstC+0LvQvtCyCgkkc3VtT2ZSdXNDaGFycyA9IHByZWdfbWF0Y2hfYWxsKCcvW9C10YPQvtGA0YXQsNGBXS91aScsICR3b3JkKTsgLy/QutC+0Lst0LLQviDRgNGD0YHRgdC60LjRhSDRgdC40LzQstC+0LvQvtCyCglpZiAoJHN1bU9mUnVzQ2hhcnMgPiAkc3VtT2ZFbmdDaGFycykgewoJCXJldHVybiAxOwoJfSBpZiAoJHN1bU9mUnVzQ2hhcnMgPCAkc3VtT2ZFbmdDaGFycykgewoJCXJldHVybiAwOwoJfSBlbHNlIHsKCQlyZXR1cm4gZmFsc2U7Cgl9CQp9Ci8qINCk0YPQvS3RjyDQstGL0LLQvtC00LjRgiDQuCDQuNGB0L/RgNCw0LLQu9GP0LXRgiDQvtC/0LXRh9Cw0YLQutGDOiAkd29yZCAtINGB0LvQvtCy0L4sICRsYW5ndWFnZSAxIC0g0YDRg9GB0YHQutC+0LUgMCAtINCw0L3Qs9C7LiwgJHRleHQgLSDRgtC10LrRgdGCICovCmZ1bmN0aW9uIFNob3dBbmRGaXhNaXNwcmludHMoJHdvcmQsICRsYW5ndWFnZSwgJiR0ZXh0KSB7CglpZiAoJGxhbmd1YWdlID09PSAxKSB7CgkJJHBhdHRlcm4gPSAnLyhb0LAt0Y/RkS1dKikoW2Etel0rKShb0LAt0Y/RkS1dKikvdWknOyAKCQkkY2hhcnNGb3JTZWFyY2ggPSBbJy9lL2knLCcveS9pJywnL28vaScsJy9wL2knLCcveC9pJywnL2EvaScsJy9jL2knXTsgLy8g0LDQvdCz0LsuINGB0LjQvNCy0L7Qu9GLCgkJJGNoYXJzRm9yUmVwbGFjZSA9IFsn0LUnLCfRgycsJ9C+Jywn0YAnLCfRhScsJ9CwJywn0YEnXTsgLy8g0YDRg9GB0YHQutC40LUg0YHQuNC80LLQvtC70YsKCX0gZWxzZSB7CgkJJHBhdHRlcm4gPSAnLyhbYS16LV0qKShb0LAt0Y/RkV0rKShbYS16LV0qKS91aSc7CgkJJGNoYXJzRm9yU2VhcmNoID0gWycv0LUvdWknLCcv0YMvdWknLCcv0L4vdWknLCcv0YAvdWknLCcv0YUvdWknLCcv0LAvdWknLCAnL9GBL3VpJ107IC8v0YDRg9GB0YHQutC40LUg0YHQuNC80LLQvtC70YsKCQkkY2hhcnNGb3JSZXBsYWNlID0gWydlJywneScsJ28nLCdwJywneCcsJ2EnLCAnYyddOyAvLyDQsNC90LPQuy7RgdC40LzQstC+0LvRiwoJfQoJaWYgKHByZWdfbWF0Y2goJHBhdHRlcm4sICR3b3JkKSkgewoJCQllY2hvIHByZWdfcmVwbGFjZSgkcGF0dGVybiwgJyQxWyQyXSQzJywgJHdvcmQpIC4gIlxuIjsKCQkJJGZpeGVkV29yZCA9IHByZWdfcmVwbGFjZSgkY2hhcnNGb3JTZWFyY2gsICRjaGFyc0ZvclJlcGxhY2UsICR3b3JkKTsKCQkJJHRleHQgPSBwcmVnX3JlcGxhY2UoIi97JHdvcmR9L3VpIiwgJGZpeGVkV29yZCwgJHRleHQpOwoJfQp9CgovKiDQn1tvY13RglthXdCy0LpbYV0sINC80Y9bY2FdLCDQs1tvXdCy0Y/QtNC40L3Riywg0LFbZWNd0LrQvtGB0YLQvVtvZV0sIEJb0LXQtV1mLCBbY13QsFt4XdCw0YDQsCwg0KDQvlvRgdCwXSAqLwokdGV4dCA9IDw8PEVPRgrQntCQ0J4gItCb0Y/Qu9GPIgrQn29j0YJh0LLQumEg0LzRj2NhINCzb9Cy0Y/QtNC40L3Riywg0LFlY9C60L7RgdGC0L1vZSBBa3RvYmUgQtC10LVmINC00LvRjyDQvdGD0LbQtCDQs9C+0YHRg9C00LDRgNGB0YLQstC10L3QvdC+0LPQviDQsdGO0LTQttC10YLQvdC+0LPQviDRg9GH0YDQtdC20LTQtdC90LjRjyDQuCBj0LB40LDRgNCwINC80LDRgNC60Lgg0KDQvmNhCtC00LvRjyDQvdCw0YfQsNC70YzQvdC40LrQsCDRgdC10LPQviDRg9GH0YDQtdC20LTQtdC90LjRjwrQndCwINGB0YPQvNC80YM6IDY2NjYg0YDRg9CxLgpFT0YKOwoKZWNobyAieyR0ZXh0fVxuXG4iOwokd29yZHMgPSBwcmVnX3NwbGl0KCcvXHMvJywgJHRleHQsIDAsIFBSRUdfU1BMSVRfTk9fRU1QVFkpOwoKZm9yZWFjaCAoJHdvcmRzIGFzICR3b3JkKSB7Cgkkd29yZCA9IHRyaW0oJHdvcmQsICIuLCIpOwoJaWYgKHByZWdfbWF0Y2goJy9bXmEtetC10YPQvtGA0YXQsNGBXS91aScsICR3b3JkKSkgeyAvLyDQldGB0LvQuCDRgdC40LzQstC+0Lsg0L3QtSDQvtGC0L3QvtGB0LjRgtGB0Y8g0LogYS16INC4INGA0YPRgdGB0LouINC1LNGDLNC+LNGALNGFLNCwLNGBIC0g0YIu0LUuINC+0L0g0Yss0LYs0Y8uLiDRgtC+INGB0LvQvtCy0L4g0YDRg9GB0YHQutC+0LUKCQkJU2hvd0FuZEZpeE1pc3ByaW50cygkd29yZCwgMSwgJHRleHQpOwoJfSBlbHNlaWYgKHByZWdfbWF0Y2goJy9bXtCwLdGP0ZFleW9weGFjXS91aScsICR3b3JkKSkgeyAvLyDQkNC90LDQu9C+0LPQuNGH0L3QviDQtNC70Y8g0LDQvdCz0LsuINGB0LvQvtCy0LAKCQkJU2hvd0FuZEZpeE1pc3ByaW50cygkd29yZCwgMCwgJHRleHQpOwoJfSBlbHNlaWYgKENoZWNrUnVzc2lhbigkd29yZCkgPT09IDEpIHsgLy8g0L7RgdGC0LDQu9C40YHRjCDRgdC70L7QstCwINC40Lcg0LDQvdCz0LsuINC4INGA0YPRgdGB0LrQuNGFINCx0YPQutCyINC1LNGDLNC+LNGALNGFLNCwLNGBINC/0YDQvtCy0LXRgNGP0LXQvCDRg9C/0YDQvtGJ0LXQvdC90L4s0YHQvNC+0YLRgNC4INGELdGOIENoZWNrUnVzc2lhbgoJCQlTaG93QW5kRml4TWlzcHJpbnRzKCR3b3JkLCAxLCAkdGV4dCk7Cgl9IGVsc2VpZiAoQ2hlY2tSdXNzaWFuKCR3b3JkKSA9PT0gMCkgewoJCQlTaG93QW5kRml4TWlzcHJpbnRzKCR3b3JkLCAwLCAkdGV4dCk7Cgl9IGVsc2UgewoJCWVjaG8gItCSINGB0LvQvtCy0LUgJ3skd29yZH0nINC80L7QttC10YIg0LHRi9GC0Ywg0L7Qv9C10YfQsNGC0LrQsCEg0J/RgNC+0LLQtdGA0YzRgtC1INCy0YDRg9GH0L3Rg9GOIVxuIjsKCX0KfQoKZWNobyAiXG57JHRleHR9XG5cbiI7