$str = 'Привeт hаbr';
$words = explode(' ', $str); // Делим строку на слова
$wrong_chars = 0;
for ($i = 0; $i < count($words); $i++) { // Цикл перебора слов
$chars = preg_split('//u', $words[$i], null, PREG_SPLIT_NO_EMPTY); // Делим слова на буквы
$ru_len = 0;
$en_len = 0;
for ($j = 0; $j < count($chars); $j++) { // Цикл перебора букв
$char_code = mb_ord($chars[$j]);
if ($char_code < 48 || $char_code > 57) {
if ($char_code > 1000) $ru_len++; // Определяем язык по char коду
else $en_len++;
}
}
if ($ru_len > $en_len) $wrong_chars += $en_len; // Если внутри слова будут буквы на
else $wrong_chars += $ru_len; // другом языке - добавляем их в счетчик
echo $words[$i] . '<br>';
echo 'ru: ' . $ru_len . '<br>';
echo 'en: ' . $en_len . '<br>';
}
echo 'Wrong chars: ' . $wrong_chars;
$total = numberOfReplacements('Привeт', 'Привет', 'Cyrillic');
echo "Замена киррилицы латиницей: $total симв.<br>";
$total = numberOfReplacements('hаbr', 'habr', 'Latin');
echo "Замена латиницы киррилицей: $total симв.";
function numberOfReplacements(string $input, string $original, string $pattern): int
{
$pattern = preg_quote($pattern, '~');
$match = preg_match_all("~\p{{$pattern}}~u", $input);
$total = mb_strlen($original);
return $total - $match;
}