@shanik

Как вывести количество замененных символов в строке?

Есть строка вида: Привeт hаbr
буква e заменен на английский e, "а" на русский.
Как найти такие замены и вывести количество замен
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
ReaverJS
@ReaverJS
Ну, как вариант:
$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;

Результат
Привeт
ru: 5
en: 1
hаbr
ru: 1
en: 3
Wrong chars: 2
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Digiport
@Digiport
PHP рулит
Думаю, вам сюда: www.php.su/functions/?preg-match-all
Ответ написан
Комментировать
@IS-Builder
~ PHP-8 & REGEXP - This is a really powerful kit ~
Ещё вариант - сравнивать с заведомо проверенными словами:
$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;
}

См. демо
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы