Ctype alnum: примеры (PHP)
ctype_alnum(mixed $text): boolФункция ctype_alnum в PHP
Функция ctype_alnum() проверяет, состоит ли переданная строка только из буквенно-цифровых символов. Она принадлежит к семейству функций ctype, которые используют текущую локаль для определения категорий символов.
Используется для валидации строковых данных, когда необходимо убедиться, что строка содержит только буквы и цифры, без пробелов, знаков пунктуации или специальных символов. Типичные случаи применения: проверка логинов, паролей, кодов.
Функция принимает один обязательный параметр:
- $text (string|int) — проверяемое значение. Если передано целое число от -128 до 255, оно будет обработано как ASCII-код одного символа. Начиная с PHP 8.1.0, передача нестроковых аргументов устарела.
Возвращает true, если каждый символ строки является буквой или цифрой в текущей локали, иначе возвращает false.
Примеры использования ctype_alnum
Проверка строки, содержащей только буквы и цифры:
$value1 = 'Hello123';
var_dump(ctype_alnum($value1));bool(true)
Строка с пробелом возвращает ложь:
$value2 = 'Hello 123';
var_dump(ctype_alnum($value2));bool(false)
Использование числового аргумента (ASCII-код):
var_dump(ctype_alnum(65)); // 'A'
var_dump(ctype_alnum(50)); // '2'
var_dump(ctype_alnum(33)); // '!'bool(true) bool(true) bool(false)
Похожие функции в PHP
Функция для проверки по регулярному выражению. Более гибкая, но менее производительная для простых проверок.
$value = 'Test123';
$result = preg_match('/^[a-zA-Z0-9]+$/', $value);Используется с фильтром FILTER_VALIDATE_REGEXP для сложных проверок или FILTER_VALIDATE_ALNUM в PHP 8.3+.
$value = 'Test123';
$result = filter_var($value, FILTER_VALIDATE_ALNUM);Комбинация этих функций может заменить ctype_alnum, но требует раздельной проверки.
function custom_alnum($str) {
return ctype_alpha($str) || ctype_digit($str);
}ctype_alnum предпочтительнее для простых проверок на буквенно-цифровые символы из-за скорости. preg_match используют при необходимости проверки по сложным шаблонам.
Типичные ошибки
Передача пустой строки возвращает ложь:
var_dump(ctype_alnum(''));bool(false)
Символ '_' не считается буквенно-цифровым:
var_dump(ctype_alnum('user_name123'));bool(false)
Для не-ASCII символов результат зависит от настроек локали:
setlocale(LC_CTYPE, 'ru_RU.UTF-8');
var_dump(ctype_alnum('Привет123'));Результат может различаться в разных системах.
До PHP 8.1 это приводило к предупреждению и false:
var_dump(ctype_alnum(['test']));В PHP 8.1+ это вызывает уведомление об устаревании.
Изменения в версиях PHP
Передача нестроковых аргументов теперь вызывает уведомление об устаревании. Ранее целые числа и строки, содержащие числа, интерпретировались как ASCII-коды.
// До PHP 8.1
ctype_alnum(123); // Проверка символа '}'
// С PHP 8.1 - устарелоДобавлен фильтр FILTER_VALIDATE_ALNUM для функции filter_var().
$value = 'Test123';
var_dump(filter_var($value, FILTER_VALIDATE_ALNUM));string(7) "Test123"
Расширенные примеры
Проверка, что логин содержит только буквы и цифры без пробелов:
function validateLogin($login) {
return ctype_alnum($login) && strlen($login) >= 3;
}
echo validateLogin('User123') ? 'Valid' : 'Invalid'; // Valid
echo validateLogin('User 123') ? 'Valid' : 'Invalid'; // InvalidФильтрация массива строк по критерию буквенно-цифрового содержания:
$items = ['Hello', 'Test123', 'Hello World', '123', ''];
$filtered = array_filter($items, 'ctype_alnum');
print_r($filtered);Array
(
[0] => Hello
[1] => Test123
[3] => 123
)При правильной локали функция работает с не-ASCII символами:
setlocale(LC_CTYPE, 'ru_RU.UTF-8');
var_dump(ctype_alnum('Тест123')); // Может вернуть true
var_dump(ctype_alnum('Test123')); // trueДемонстрация разницы в скорости работы с регулярными выражениями:
$value = 'Test123456';
// Быстрее
$start = microtime(true);
for ($i = 0; $i < 100000; $i++) {
ctype_alnum($value);
}
echo 'ctype_alnum: ' . (microtime(true) - $start);Функции ctype обычно работают быстрее preg_match для простых проверок.
Аналоги в других языках
Метод str.isalnum() проверяет строку на буквенно-цифровые символы.
text = "Hello123"
print(text.isalnum()) # True
print("Hello 123".isalnum()) # FalseTrue False
Используют регулярное выражение, так как нет встроенной функции.
function isAlnum(str) {
return /^[a-zA-Z0-9]+$/.test(str);
}
console.log(isAlnum('Hello123')); // trueОператор REGEXP для проверки паттерна.
SELECT 'Hello123' REGEXP '^[[:alnum:]]+$' AS is_alnum;1
Основное отличие PHP-функции — зависимость от текущей локали, тогда как в Python проверка Unicode, а в JavaScript обычно только ASCII.