Определить, является ли текст UTF-8 все ASCII? - PullRequest
5 голосов
/ 10 ноября 2010

Какой самый быстрый способ, в PHP, определить, является ли какой-то данный текст UTF-8 чисто ASCII или нет?

Ответы [ 3 ]

12 голосов
/ 10 ноября 2010

Возможно, более быстрой функцией было бы использование класса отрицательных символов (поскольку регулярное выражение может просто останавливаться при попадании в первый символ, и нет необходимости захватывать что-либо внутри):

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');
}
3 голосов
/ 10 ноября 2010

Проверьте, больше ли байт больше 0x7f или какой-либо символ больше U + 007F.

1 голос
/ 10 ноября 2010
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);
}
...