Какой самый быстрый способ в PHP определить, является ли какой-то данный текст UTF-8 чисто ASCII или нет?
Возможно, более быстрая функция заключалась бы в использовании отрицательного класса символов (поскольку регулярное выражение может просто остановиться, когда оно попадает в первый символ, и нет необходимости внутренне захватывать что-либо):
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'); }
Проверьте, больше ли байт, чем 0x7f, или любой символ выше U + 007F.
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); }