<?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 ;
} elseif ( $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+0LvQvtCyCglpZiAoJHN1bU9mUnVzQ2hhcnMgPiAkc3VtT2ZFbmdDaGFycykgewoJCXJldHVybiAxOwoJfSBlbHNlaWYgKCRzdW1PZlJ1c0NoYXJzIDwgJHN1bU9mRW5nQ2hhcnMpIHsKCQlyZXR1cm4gMDsKCX0gZWxzZSB7CgkJcmV0dXJuIGZhbHNlOwoJfQkKfQovKiDQpNGD0L0t0Y8g0LLRi9Cy0L7QtNC40YIg0Lgg0LjRgdC/0YDQsNCy0LvRj9C10YIg0L7Qv9C10YfQsNGC0LrRgzogJHdvcmQgLSDRgdC70L7QstC+LCAkbGFuZ3VhZ2UgMSAtINGA0YPRgdGB0LrQvtC1IDAgLSDQsNC90LPQuy4sICR0ZXh0IC0g0YLQtdC60YHRgiAqLwpmdW5jdGlvbiBTaG93QW5kRml4TWlzcHJpbnRzKCR3b3JkLCAkbGFuZ3VhZ2UsICYkdGV4dCkgewoJaWYgKCRsYW5ndWFnZSA9PT0gMSkgewoJCSRwYXR0ZXJuID0gJy8oW9CwLdGP0ZEtXSopKFthLXpdKykoW9CwLdGP0ZEtXSopL3VpJzsgCgkJJGNoYXJzRm9yU2VhcmNoID0gWycvZS9pJywnL3kvaScsJy9vL2knLCcvcC9pJywnL3gvaScsJy9hL2knLCcvYy9pJ107IC8vINCw0L3Qs9C7LiDRgdC40LzQstC+0LvRiwoJCSRjaGFyc0ZvclJlcGxhY2UgPSBbJ9C1Jywn0YMnLCfQvicsJ9GAJywn0YUnLCfQsCcsJ9GBJ107IC8vINGA0YPRgdGB0LrQuNC1INGB0LjQvNCy0L7Qu9GLCgl9IGVsc2UgewoJCSRwYXR0ZXJuID0gJy8oW2Etei1dKikoW9CwLdGP0ZFdKykoW2Etei1dKikvdWknOwoJCSRjaGFyc0ZvclNlYXJjaCA9IFsnL9C1L3VpJywnL9GDL3VpJywnL9C+L3VpJywnL9GAL3VpJywnL9GFL3VpJywnL9CwL3VpJywgJy/RgS91aSddOyAvL9GA0YPRgdGB0LrQuNC1INGB0LjQvNCy0L7Qu9GLCgkJJGNoYXJzRm9yUmVwbGFjZSA9IFsnZScsJ3knLCdvJywncCcsJ3gnLCdhJywgJ2MnXTsgLy8g0LDQvdCz0Lsu0YHQuNC80LLQvtC70YsKCX0KCWlmIChwcmVnX21hdGNoKCRwYXR0ZXJuLCAkd29yZCkpIHsKCQkJZWNobyBwcmVnX3JlcGxhY2UoJHBhdHRlcm4sICckMVskMl0kMycsICR3b3JkKSAuICJcbiI7CgkJCSRmaXhlZFdvcmQgPSBwcmVnX3JlcGxhY2UoJGNoYXJzRm9yU2VhcmNoLCAkY2hhcnNGb3JSZXBsYWNlLCAkd29yZCk7CgkJCSR0ZXh0ID0gcHJlZ19yZXBsYWNlKCIveyR3b3JkfS91aSIsICRmaXhlZFdvcmQsICR0ZXh0KTsKCX0KfQoKLyog0J9bb2Nd0YJbYV3QstC6W2FdLCDQvNGPW2NhXSwg0LNbb13QstGP0LTQuNC90YssINCxW2VjXdC60L7RgdGC0L1bb2VdLCBCW9C10LVdZiwgW2Nd0LBbeF3QsNGA0LAsINCg0L5b0YHQsF0gKi8KJHRleHQgPSA8PDxFT0YK0J7QkNCeICLQm9GP0LvRjyIK0J9vY9GCYdCy0LphINC80Y9jYSDQs2/QstGP0LTQuNC90YssINCxZWPQutC+0YHRgtC9b2UgQWt0b2JlIELQtdC1ZiDQtNC70Y8g0L3Rg9C20LQg0LPQvtGB0YPQtNCw0YDRgdGC0LLQtdC90L3QvtCz0L4g0LHRjtC00LbQtdGC0L3QvtCz0L4g0YPRh9GA0LXQttC00LXQvdC40Y8g0LggY9CweNCw0YDQsCDQvNCw0YDQutC4INCg0L5jYQrQtNC70Y8g0L3QsNGH0LDQu9GM0L3QuNC60LAg0YHQtdCz0L4g0YPRh9GA0LXQttC00LXQvdC40Y8K0J3QsCDRgdGD0LzQvNGDOiA2NjY2INGA0YPQsS4KRU9GCjsKCmVjaG8gInskdGV4dH1cblxuIjsKJHdvcmRzID0gcHJlZ19zcGxpdCgnL1xzLycsICR0ZXh0LCAwLCBQUkVHX1NQTElUX05PX0VNUFRZKTsKCmZvcmVhY2ggKCR3b3JkcyBhcyAkd29yZCkgewoJJHdvcmQgPSB0cmltKCR3b3JkLCAiLiwiKTsKCWlmIChwcmVnX21hdGNoKCcvW15hLXrQtdGD0L7RgNGF0LDRgV0vdWknLCAkd29yZCkpIHsgLy8g0JXRgdC70Lgg0YHQuNC80LLQvtC7INC90LUg0L7RgtC90L7RgdC40YLRgdGPINC6IGEteiDQuCDRgNGD0YHRgdC6LiDQtSzRgyzQvizRgCzRhSzQsCzRgSAtINGCLtC1LiDQvtC9INGLLNC2LNGPLi4g0YLQviDRgdC70L7QstC+INGA0YPRgdGB0LrQvtC1CgkJCVNob3dBbmRGaXhNaXNwcmludHMoJHdvcmQsIDEsICR0ZXh0KTsKCX0gZWxzZWlmIChwcmVnX21hdGNoKCcvW17QsC3Rj9GRZXlvcHhhY10vdWknLCAkd29yZCkpIHsgLy8g0JDQvdCw0LvQvtCz0LjRh9C90L4g0LTQu9GPINCw0L3Qs9C7LiDRgdC70L7QstCwCgkJCVNob3dBbmRGaXhNaXNwcmludHMoJHdvcmQsIDAsICR0ZXh0KTsKCX0gZWxzZWlmIChDaGVja1J1c3NpYW4oJHdvcmQpID09PSAxKSB7IC8vINC+0YHRgtCw0LvQuNGB0Ywg0YHQu9C+0LLQsCDQuNC3INCw0L3Qs9C7LiDQuCDRgNGD0YHRgdC60LjRhSDQsdGD0LrQsiDQtSzRgyzQvizRgCzRhSzQsCzRgSDQv9GA0L7QstC10YDRj9C10Lwg0YPQv9GA0L7RidC10L3QvdC+LNGB0LzQvtGC0YDQuCDRhC3RjiBDaGVja1J1c3NpYW4KCQkJU2hvd0FuZEZpeE1pc3ByaW50cygkd29yZCwgMSwgJHRleHQpOwoJfSBlbHNlaWYgKENoZWNrUnVzc2lhbigkd29yZCkgPT09IDApIHsKCQkJU2hvd0FuZEZpeE1pc3ByaW50cygkd29yZCwgMCwgJHRleHQpOwoJfSBlbHNlIHsKCQllY2hvICLQkiDRgdC70L7QstC1ICd7JHdvcmR9JyDQvNC+0LbQtdGCINCx0YvRgtGMINC+0L/QtdGH0LDRgtC60LAhINCf0YDQvtCy0LXRgNGM0YLQtSDQstGA0YPRh9C90YPRjiFcbiI7Cgl9Cn0KCmVjaG8gIlxueyR0ZXh0fVxuXG4iOw==