Возможно, более быстрой функцией было бы использование класса отрицательных символов (поскольку регулярное выражение может просто останавливаться при попадании в первый символ, и нет необходимости захватывать что-либо внутри):
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');
}