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

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

preg_match

Функция для проверки строк с использованием регулярных выражений. Позволяет создавать более сложные шаблоны.

$text = 'HELLO';
var_dump(preg_match('/^[A-Z]+$/', $text));
int(1)

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

$text = 'hello';
var_dump(ctype_lower($text));
bool(true)
strtoupper и сравнение

Преобразование строки к верхнему регистру и сравнение с оригиналом.

$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

PHP 8.1.0

Передача аргумента типа int (или других нестроковых типов) для ctype upper теперь вызывает устаревающее предупреждение (Deprecated). Функция продолжает работать, преобразовывая число в строку, но такое поведение планируется изменить в будущем.

PHP 8.4.0 (ожидаемые изменения)

Планируется, что для нестроковых аргументов будет выбрасываться исключение TypeError, что сделает функцию более строгой и предсказуемой. Разработчикам рекомендуется заранее убедиться, что в функцию передаются только строки.

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

Валидация аббревиатур

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

Пример php
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
Фильтрация массива строк

Выбор из массива только строк, состоящих из заглавных букв.

Пример php
$data = ['HELLO', 'World', '123', 'PHP', 'CODE', 'Test'];
$filtered = array_filter($data, 'ctype_upper');
print_r($filtered);
Array
(
    [0] => HELLO
    [3] => PHP
    [4] => CODE
)
Проверка с учетом локали

Работа с символами национальных алфавитов требует правильной настройки локали.

Пример php
setlocale(LC_CTYPE, 'ru_RU.UTF-8');
$russianUpper = 'ПРИВЕТ';
$russianLower = 'привет';
var_dump(ctype_upper($russianUpper));
var_dump(ctype_upper($russianLower));
bool(true)
bool(false)
Совместное использование с другими функциями ctype

Проверка сложных условий, например, что строка состоит только из букв и все они заглавные.

Пример php
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
Генерация случайных строк из заглавных букв

Использование функции для проверки сгенерированной строки.

Пример php
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

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

Python: str.isupper()

Метод строки возвращает True, если все символы в строке в верхнем регистре и есть хотя бы один символ, способный к регистру.

text = 'HELLO'
print(text.isupper())
True

Отличие: в Python метод учитывает наличие хотя бы одного буквенного символа, а в PHP ctype_upper для пустой строки вернет false.

JavaScript: Регулярное выражение

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

let text = 'HELLO';
console.log(/^[A-Z]+$/.test(text));
true
MySQL: Регулярное выражение

Использование оператора REGEXP или RLIKE.

SELECT 'HELLO' REGEXP '^[A-Z]+$' AS is_upper;
is_upper: 1
C#: Enumerable.All и Char.IsUpper

Проверка каждого символа с помощью LINQ.

string text = "HELLO";
bool result = !string.IsNullOrEmpty(text) && text.All(char.IsUpper);
Console.WriteLine(result);
True

PHP ctype_upper function comments

En
Ctype upper Check for uppercase character(s)