Ctype alpha: примеры (PHP)
ctype_alpha(mixed $text): boolФункция ctype_alpha в PHP
Функция ctype_alpha проверяет, состоит ли переданная строка только из буквенных символов. Она входит в семейство функций ctype, предназначенных для проверки типов символов в строке.
Эта функция применяется для валидации данных, например, при проверке имен, фамилий, названий, где не допускаются цифры, пробелы или знаки препинания. Она часто используется в обработке форм ввода.
Функция принимает один обязательный аргумент:
- $text (string|int) — проверяемая строка. Если передано целое число (int) в диапазоне от -128 до 255, оно будет интерпретировано как ASCII-код одного символа. Начиная с PHP 8.1.0, передача нестроковых аргументов устарела. В PHP 8.4.0 передача целых чисел запрещена.
Функция возвращает true, если каждый символ строки является буквой (как заглавной, так и строчной) из текущей локали, иначе возвращает false. Для пустой строки возвращается false.
Простые примеры использования
$string1 = 'Hello';
var_dump(ctype_alpha($string1));bool(true)
$string2 = 'Hello World';
var_dump(ctype_alpha($string2));bool(false)
$string3 = 'Hello123';
var_dump(ctype_alpha($string3));bool(false)
setlocale(LC_CTYPE, 'ru_RU.UTF-8');
$string4 = 'Привет';
var_dump(ctype_alpha($string4));bool(true)
$string5 = '';
var_dump(ctype_alpha($string5));bool(false)
Похожие функции в PHP
Функция для проверки строки по регулярному выражению. Более универсальна, но менее производительна для простых проверок.
var_dump(preg_match('/^[a-zA-Z]+$/', 'Hello')); // 1 - совпадение естьСпециализированные функции для проверки символов на верхний и нижний регистр.
var_dump(ctype_upper('HELLO')); // trueКомбинация is_string и собственной логики обхода строки. Предпочтительнее использовать ctype_alpha для простых проверок из-за оптимизированной реализации на языке C.
Типичные ошибки
До PHP 8.1.0 передача целых чисел была допустима, сейчас это вызывает уведомление об устаревании или ошибку.
var_dump(ctype_alpha(65)); // До PHP 8.1: проверка ASCII-символа 'A'Deprecated: ctype_alpha(): Argument of type int will be interpreted as string in the future
Функция зависит от текущей локали. Без ее правильной установки, буквы за пределами ASCII могут быть не распознаны.
setlocale(LC_CTYPE, 'C'); // Локаль по умолчанию
$string = 'École';
var_dump(ctype_alpha($string));bool(false)
Распространенная ошибка — ожидание true для строк, содержащих пробелы.
$fullName = 'John Doe';
if (ctype_alpha($fullName)) { // false
echo 'Имя валидно';
}Функция всегда возвращает false для пустой строки, что иногда упускают из виду.
Изменения в последних версиях PHP
Запрещена передача аргументов типа int. Теперь функция принимает только строки (string). При передаче целого числа возникает TypeError.
Передача аргумента, отличного от строки (string), стала вызывать уведомление об устаревании (E_DEPRECATED). Ранее такие аргументы молча преобразовывались.
Функция теперь выбрасывает TypeError, если передано ноль аргументов. Ранее она возвращала false.
Расширенные примеры использования
Пример проверки, что имя содержит только буквы и имеет допустимую длину.
function validateName($name) {
if (empty($name)) return 'Имя не может быть пустым';
if (!ctype_alpha($name)) return 'Имя должно содержать только буквы';
if (mb_strlen($name) < 2) return 'Имя слишком короткое';
return 'Имя валидно';
}
echo validateName('Anna');Имя валидно
Фильтрация массива, оставляющая только строки, состоящие из букв.
$words = ['Hello', 'World123', 'PHP8', 'Alpha', 'Beta1', 'Gamma'];
$alphaOnly = array_filter($words, 'ctype_alpha');
print_r($alphaOnly);Array
(
[0] => Hello
[3] => Alpha
[5] => Gamma
)Проверка, что строка начинается с заглавной буквы, а остальные — строчные.
function isCapitalized($str) {
if (empty($str)) return false;
return ctype_upper($str[0]) && ctype_lower(substr($str, 1));
}
var_dump(isCapitalized('London'), isCapitalized('london'));bool(true) bool(false)
Корректная настройка локали для проверки русских букв.
setlocale(LC_CTYPE, 'ru_RU.UTF-8');
$testStrings = ['Москва', 'Moscow', 'Москва123'];
foreach ($testStrings as $str) {
echo $str . ': ' . (ctype_alpha($str) ? 'Да' : 'Нет') . "\n";
}Москва: Да Moscow: Да Москва123: Нет
Пример интеграции функции в метод класса для проверки данных.
class User {
private $name;
public function setName($name) {
if (!ctype_alpha($name)) {
throw new InvalidArgumentException('Имя должно состоять только из букв');
}
$this->name = $name;
}
}
$user = new User();
$user->setName('Alice'); // OK
// $user->setName('Alice123'); // Выбросит исключениеАналоги в других языках
Метод строки возвращает True, если все символы являются буквами и строка не пуста. Работает с Unicode.
print('Hello'.isalpha()) # True
print('Hello123'.isalpha()) # FalseTrue False
В JavaScript нет встроенной функции, аналогичной ctype_alpha. Используют тест регулярного выражения.
/^[a-zA-Z]+$/.test('Hello'); // true
/^[a-zA-Z]+$/.test('Hello123'); // falsetrue false
Использование оператора REGEXP для проверки шаблона.
SELECT 'Hello' REGEXP '^[a-zA-Z]+$'; -- 1
SELECT 'Hello123' REGEXP '^[a-zA-Z]+$'; -- 01 0
Используется метод Char.IsLetter для каждого символа строки.
"Hello".All(Char.IsLetter); // true