我需要帮助来使用 PHP 检测字符串何时包含 4 字节字符。是否有内置函数或正则表达式可以有效地做到这一点?
我发现这篇文章讨论了替换,但我找不到仅检测的工作示例。
这就是我所得到的,但它也失败了:
$chars = str_split($term);
foreach ($chars as $char) {
if (strlen($char) >= 4) {
print "Found 4-byte character\n";
}
}
Run Code Online (Sandbox Code Playgroud)
可以使用正则表达式来匹配BMP之外的所有字符,即上面的Unicode空间中的所有字符U+FFFF
$str = \'\xe2\x82\xacA\xc2\xa2\';\n\n$r = preg_match_all(\'|[\\x{10000}-\\x{10FFFF}]|u\', $str, $matches);\n\nvar_dump($matches[0]);\nRun Code Online (Sandbox Code Playgroud)\n\n在这里尝试一下: https: //3v4l.org/JX9aQ
\n\n有趣的事实。如果您使用 PHP 7.4,您可以使用mb_str_split()和array_filter()完成此操作。我不认为它比正则表达式更有效,但很高兴知道。
$nonBMP = array_filter(mb_str_split($str), fn($c) => strlen($c)==4);\nRun Code Online (Sandbox Code Playgroud)\n