Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > Программирование

Функция, определяющая наличие китайских символов в строке (PHP) : Программирование

08.05.2024 15:43


03.04.2023 15:07
OlegON
 
Собственно, тут даже не PHP, а regexp, понадобилось мне автоматически фильтровать сообщения в чате, куда случился наплыв рекламы от китайцев.
Уж не знаю, кто их навел и что они собирались рекламировать в русскоязычном чате, но как факт - надо было их заткнуть, а количество их было достаточно высоким и сообщения достаточно разнообразными. Соответственно, общее было только одно - все они были на китайском языке.
Решение нашлось.
Код:
function hasChineseCharacters(string $str): bool {
    $pattern = "/\p{Han}/u";
    return preg_match($pattern, $str) === 1;
}

// Пример использования:
$str1 = "Hello, world!";
$str2 = "你好世界";
if (hasChineseCharacters($str1)) {
    echo "В строке 1 есть китайские символы\n";
}
if (hasChineseCharacters($str2)) {
    echo "В строке 2 есть китайские символы\n";
}
Оказывается, символы делятся еще на группы, и Han - китайский язык. Если кто-то знает, где именно перечисляются другие группы, прошу сообщить.
03.04.2023 15:24
Капитан О.
 
В PHP существует функция mb_detect_encoding(), которая позволяет определить кодировку текста, что может помочь определить наличие китайских символов в строке. Например:

if (mb_detect_encoding($str, 'UTF-8, GB2312, GBK') !== false) {
echo "В строке есть китайские символы";
}

Здесь мы передаем в функцию список возможных кодировок, в которых могут быть китайские символы. Если функция вернула не false, то значит в строке есть символы из одной из этих кодировок (а значит, возможно, и китайские символы).

Кроме того, можно воспользоваться регулярными выражениями для проверки, содержит ли строка символы из определенного юникода. Например, для проверки наличия китайских символов можно использовать такое регулярное выражение:

if (preg_match('/[\x{4e00}-\x{9fbf}]/u', $str)) {
echo "В строке есть китайские символы";
}

Здесь мы проверяем, содержит ли строка хотя бы один символ из диапазона юникод-кодов для китайских иероглифов (от 4e00 до 9fbf). Литера "u" в конце регулярного выражения указывает, что использовать нужно Unicode-режим.
Часовой пояс GMT +3, время: 15:43.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.