确定 UTF-8 文本是否都是 ASCII?

发布于 2024-10-01 10:49:12 字数 51 浏览 2 评论 0原文

在 PHP 中,确定某些给定的 UTF-8 文本是否是纯 ASCII 的最快方法是什么?

What's the fastest way, in PHP, to determine if some given UTF-8 text is purely ASCII or not?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

千秋岁 2024-10-08 10:49:12

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

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

A possibly faster function would be to use a negative character class (since the regex can just stop when it hits the first character, and there's no need to internally capture anything):

function isAscii($str) {
    return 0 == preg_match('/[^\x00-\x7F]/', $str);
}

Without regex (based on my comment) {

function isAscii($str) {
    $len = strlen($str) {
    for ($i = 0; $i < $len; $i++) {
        if (ord($str[$i]) > 127) return false;
    }
    return true;
}

But I'd have to ask, why are you so concerned about faster? Use the more readable and easier to understand version, and only worry about optimizing it when you know it's a problem...

Edit:

Another option is mb_check_encoding:

function isAscii($str) {
    return mb_check_encoding($str, 'ASCII');
}
韬韬不绝 2024-10-08 10:49:12

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

Check if any byte is greater than 0x7f, or any character is above U+007F.

深爱不及久伴 2024-10-08 10:49:12
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);
}
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);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文