在PHP中,确定某些给定的UTF-8文本是否纯粹是ASCII的最快方法是什么?
答案 0 :(得分:11)
可能更快的功能是使用负字符类(因为正则表达式只能在它碰到第一个字符时停止,并且不需要在内部捕获任何东西):
function isAscii($str) {
return 0 == preg_match('/[^\x00-\x7F]/', $str);
}
没有正则表达式(基于我的评论){
function isAscii($str) {
$len = strlen($str) {
for ($i = 0; $i < $len; $i++) {
if (ord($str[$i]) > 127) return false;
}
return true;
}
但我不得不问,你为什么这么关心更快?使用更易阅读且更易于理解的版本,只有在知道这是一个问题时才会担心优化它...
修改强>:
然后最快的可能是mb_check_encoding
:
function isAscii($str) {
return mb_check_encoding($str, 'ASCII');
}
答案 1 :(得分:3)
检查是否有任何字节大于0x7f,或者任何字符是否高于U + 007F。
答案 2 :(得分:0)
function isAscii($str) {
return preg_match('/^([\x00-\x7F])*$/', $str);
}
// doesn't accept ASCII control characters
function isAsciiText($str) {
return preg_match('/^([\x09\x0A\x0D\x20-\x7E])*$/', $str);
}