Ctype upper: примеры (PHP)
ctype_upper(mixed $text): boolФункция ctype_upper в PHP
Функция ctype_upper проверяет, состоят ли все символы в переданной строке из заглавных букв. Она входит в расширение ctype, которое включено в PHP по умолчанию и предназначено для проверки типов символов.
Функция применяется для валидации строк, где требуется убедиться, что все символы являются заглавными буквами. Типичные сценарии включают проверку кодов (например, аббревиатур, серийных номеров), валидацию ввода пользователя или обработку текстовых данных.
Функция принимает один обязательный аргумент:
- $text (string|int|null) — проверяемая строка. Если передано целое число (int), оно будет преобразовано в строку, содержащую десятичные цифры этого числа. Начиная с PHP 8.1.0, передача нестроковых аргументов устарела. В PHP 8.4.0 ожидается выброс исключения TypeError для нестроковых аргументов.
Функция возвращает true, если каждый символ строки является заглавной буквой в текущей локали, иначе false. Для пустой строки возвращается false.
Примеры использования ctype_upper
Проверка строки из заглавных букв:
$text = 'HELLO';
var_dump(ctype_upper($text));bool(true)
Проверка строки со строчными буквами:
$text = 'Hello';
var_dump(ctype_upper($text));bool(false)
Строка содержит цифры:
$text = 'ABC123';
var_dump(ctype_upper($text));bool(false)
Строка содержит пробелы и знаки препинания:
$text = 'HELLO WORLD!';
var_dump(ctype_upper($text));bool(false)
Передача пустой строки:
$text = '';
var_dump(ctype_upper($text));bool(false)
Похожие функции в PHP
Функция для проверки строк с использованием регулярных выражений. Позволяет создавать более сложные шаблоны.
$text = 'HELLO';
var_dump(preg_match('/^[A-Z]+$/', $text));int(1)
Проверяет, все ли символы в строке являются строчными буквами. Противоположна ctype_upper.
$text = 'hello';
var_dump(ctype_lower($text));bool(true)
Преобразование строки к верхнему регистру и сравнение с оригиналом.
$text = 'HELLO';
var_dump($text === strtoupper($text) && $text !== '');bool(true)
Выбор функции: ctype_upper работает быстрее регулярных выражений и предназначена для простых проверок. preg_match используют при необходимости сложных шаблонов. strtoupper подходит, если нужно также само преобразование.
Типичные ошибки при использовании
Функция зависит от текущей локали. Без правильной настройки могут некорректно обрабатываться символы за пределами ASCII.
setlocale(LC_CTYPE, 'C');
$text = 'HELLO';
var_dump(ctype_upper($text));
setlocale(LC_CTYPE, 'ru_RU.UTF-8');
$text = 'ПРИВЕТ';
var_dump(ctype_upper($text));bool(true) bool(false)
До PHP 8.1 функция преобразовывала числа в строку. С PHP 8.1 такое использование устарело.
$num = 123;
var_dump(ctype_upper($num)); // Устаревшее поведениеDeprecated: ctype_upper(): Argument of type int will be interpreted as string in the future bool(false)
Функция возвращает false для пустой строки, что иногда может быть неожиданным.
$text = '';
var_dump(ctype_upper($text));bool(false)
Пробелы не являются заглавными буквами, поэтому функция вернет false.
$text = 'HELLO WORLD';
var_dump(ctype_upper($text));bool(false)
Изменения в последних версиях PHP
Передача аргумента типа int (или других нестроковых типов) для ctype upper теперь вызывает устаревающее предупреждение (Deprecated). Функция продолжает работать, преобразовывая число в строку, но такое поведение планируется изменить в будущем.
Планируется, что для нестроковых аргументов будет выбрасываться исключение TypeError, что сделает функцию более строгой и предсказуемой. Разработчикам рекомендуется заранее убедиться, что в функцию передаются только строки.
Расширенные примеры использования
Проверка, что аббревиатура состоит только из заглавных букв.
function validateAcronym($acronym) {
return ctype_upper($acronym) && strlen($acronym) > 0;
}
$tests = ['NASA', 'FBI', 'php', 'CIA', ''];
foreach ($tests as $test) {
echo "$test: " . (validateAcronym($test) ? 'Valid' : 'Invalid') . "\n";
}NASA: Valid FBI: Valid php: Invalid CIA: Valid : Invalid
Выбор из массива только строк, состоящих из заглавных букв.
$data = ['HELLO', 'World', '123', 'PHP', 'CODE', 'Test'];
$filtered = array_filter($data, 'ctype_upper');
print_r($filtered);Array
(
[0] => HELLO
[3] => PHP
[4] => CODE
)Работа с символами национальных алфавитов требует правильной настройки локали.
setlocale(LC_CTYPE, 'ru_RU.UTF-8');
$russianUpper = 'ПРИВЕТ';
$russianLower = 'привет';
var_dump(ctype_upper($russianUpper));
var_dump(ctype_upper($russianLower));bool(true) bool(false)
Проверка сложных условий, например, что строка состоит только из букв и все они заглавные.
function isUppercaseLettersOnly($str) {
return ctype_upper($str) && ctype_alpha($str);
}
$tests = ['ABC', 'AbC', '123', 'A1C', ''];
foreach ($tests as $test) {
echo "$test: " . (isUppercaseLettersOnly($test) ? 'Yes' : 'No') . "\n";
}ABC: Yes AbC: No 123: No A1C: No : No
Использование функции для проверки сгенерированной строки.
function generateRandomUppercase($length = 10) {
do {
$random = '';
for ($i = 0; $i < $length; $i++) {
$random .= chr(rand(65, 90)); // ASCII коды A-Z
}
} while (!ctype_upper($random)); // Проверка избыточна в данном случае, но демонстрирует использование
return $random;
}
echo generateRandomUppercase(5);ZYXWV
Аналоги функции в других языках
Метод строки возвращает True, если все символы в строке в верхнем регистре и есть хотя бы один символ, способный к регистру.
text = 'HELLO'
print(text.isupper())True
Отличие: в Python метод учитывает наличие хотя бы одного буквенного символа, а в PHP ctype_upper для пустой строки вернет false.
В JavaScript нет прямой функции, используют тест регулярного выражения.
let text = 'HELLO';
console.log(/^[A-Z]+$/.test(text));true
Использование оператора REGEXP или RLIKE.
SELECT 'HELLO' REGEXP '^[A-Z]+$' AS is_upper;is_upper: 1
Проверка каждого символа с помощью LINQ.
string text = "HELLO";
bool result = !string.IsNullOrEmpty(text) && text.All(char.IsUpper);
Console.WriteLine(result);True