php 确定UTF-8文本是否都是ASCII?[副本]

bqjvbblv  于 2023-10-15  发布在  PHP
关注(0)|答案(3)|浏览(82)

此问题已在此处有答案

How do I detect non-ASCII characters in a string?(8个回答)
上个月关门了。
在PHP中,确定某个给定的UTF-8文本是否是纯ASCII的最快方法是什么?

5fjcxozz

5fjcxozz1#

一个可能更快的函数是使用一个负数字符类(因为正则表达式可以在遇到第一个字符时停止,并且不需要在内部捕获任何东西):

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');
}
gzszwxb4

gzszwxb42#

检查是否有任何字节大于0x7f,或任何字符大于U+007F。

nszi6y05

nszi6y053#

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);
}

相关问题