Ctype alpha: примеры (PHP)

Использование функции 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

preg_match

Функция для проверки строки по регулярному выражению. Более универсальна, но менее производительна для простых проверок.

var_dump(preg_match('/^[a-zA-Z]+$/', 'Hello')); // 1 - совпадение есть
ctype_upper и ctype_lower

Специализированные функции для проверки символов на верхний и нижний регистр.

var_dump(ctype_upper('HELLO')); // true
is_string с дополнительными проверками

Комбинация 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 'Имя валидно';
}
Ожидание true для пустой строки

Функция всегда возвращает false для пустой строки, что иногда упускают из виду.

Изменения в последних версиях PHP

PHP 8.4.0

Запрещена передача аргументов типа int. Теперь функция принимает только строки (string). При передаче целого числа возникает TypeError.

PHP 8.1.0

Передача аргумента, отличного от строки (string), стала вызывать уведомление об устаревании (E_DEPRECATED). Ранее такие аргументы молча преобразовывались.

PHP 8.0.0

Функция теперь выбрасывает TypeError, если передано ноль аргументов. Ранее она возвращала false.

Расширенные примеры использования

Валидация имени пользователя

Пример проверки, что имя содержит только буквы и имеет допустимую длину.

Пример php
function validateName($name) {
    if (empty($name)) return 'Имя не может быть пустым';
    if (!ctype_alpha($name)) return 'Имя должно содержать только буквы';
    if (mb_strlen($name) < 2) return 'Имя слишком короткое';
    return 'Имя валидно';
}
echo validateName('Anna');
Имя валидно
Обработка массива строк

Фильтрация массива, оставляющая только строки, состоящие из букв.

Пример php
$words = ['Hello', 'World123', 'PHP8', 'Alpha', 'Beta1', 'Gamma'];
$alphaOnly = array_filter($words, 'ctype_alpha');
print_r($alphaOnly);
Array
(
    [0] => Hello
    [3] => Alpha
    [5] => Gamma
)
Комбинация с другими функциями ctype

Проверка, что строка начинается с заглавной буквы, а остальные — строчные.

Пример php
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)
Проверка строки с учетом локали для кириллицы

Корректная настройка локали для проверки русских букв.

Пример php
setlocale(LC_CTYPE, 'ru_RU.UTF-8');
$testStrings = ['Москва', 'Moscow', 'Москва123'];
foreach ($testStrings as $str) {
    echo $str . ': ' . (ctype_alpha($str) ? 'Да' : 'Нет') . "\n";
}
Москва: Да
Moscow: Да
Москва123: Нет
Использование в пользовательском валидаторе класса

Пример интеграции функции в метод класса для проверки данных.

Пример php
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'); // Выбросит исключение

Аналоги в других языках

Python: str.isalpha()

Метод строки возвращает True, если все символы являются буквами и строка не пуста. Работает с Unicode.

print('Hello'.isalpha())  # True
print('Hello123'.isalpha())  # False
True
False
JavaScript: регулярное выражение

В JavaScript нет встроенной функции, аналогичной ctype_alpha. Используют тест регулярного выражения.

/^[a-zA-Z]+$/.test('Hello'); // true
/^[a-zA-Z]+$/.test('Hello123'); // false
true
false
MySQL: регулярные выражения

Использование оператора REGEXP для проверки шаблона.

SELECT 'Hello' REGEXP '^[a-zA-Z]+$'; -- 1
SELECT 'Hello123' REGEXP '^[a-zA-Z]+$'; -- 0
1
0
C#: Char.IsLetter

Используется метод Char.IsLetter для каждого символа строки.

"Hello".All(Char.IsLetter); // true

PHP ctype_alpha function comments

En
Ctype alpha Check for alphabetic character(s)