Определите, является ли текст UTF-8 полностью ASCII?
Каков самый быстрый способ в PHP определить, является ли какой-либо текст UTF-8 чисто ASCII или нет?
4
3 answers
Возможно, более быстрой функцией было бы использование класса отрицательных символов (поскольку регулярное выражение может просто остановиться, когда оно попадет на первый символ, и нет необходимости что-либо фиксировать внутри):
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');
}
11
Author: ircmaxell, 2010-11-10 18:52:15
Проверьте, не превышает ли какой-либо байт 0x7f или какой-либо символ выше U+007F.
3
Author: Ignacio Vazquez-Abrams, 2010-11-10 18:17:44
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);
}
0
Author: philfreo, 2010-11-10 18:30:33