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

Использование функции ctype_space для проверки пробельных символов
Раздел: Работа со строками
ctype_space(mixed $text): bool
Функция ctype_space в PHP

Функция ctype_space проверяет, состоят ли все символы в переданной строке из пробельных символов. Она принадлежит к семейству функций расширения ctype, предназначенных для классификации символов в строках.

Назначение и применение

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

Аргументы функции

Функция принимает один обязательный аргумент:

  • $text (string|int) – строка или целое число для проверки. Если передано целое число, оно будет интерпретировано как ASCII-код символа. Начиная с PHP 8.1.0, передача нестроковых аргументов устарела.

Возвращаемое значение: true, если каждый символ в строке создаёт пустое пространство, иначе false.

Базовые примеры использования
Проверка строки, состоящей только из пробелов
$str1 = "   ";
$result1 = ctype_space($str1);
var_dump($result1);
bool(true)
Проверка строки с различными пробельными символами
$str2 = " \t\n\r";
$result2 = ctype_space($str2);
var_dump($result2);
bool(true)
Строка, содержащая непробельные символы
$str3 = "  Hello  ";
$result3 = ctype_space($str3);
var_dump($result3);
bool(false)
Пустая строка
$str4 = "";
$result4 = ctype_space($str4);
var_dump($result4);
bool(false)
Аналогичные функции в PHP
trim() и empty()

Комбинация функций trim() и empty() может определить, содержит ли строка только пробельные символы. trim() удаляет пробелы с обоих концов строки, после чего можно проверить, не стала ли строка пустой.

$str = "   ";
$result = trim($str) === '';
var_dump($result);
bool(true)
preg_match()

Регулярное выражение /^[\s]*$/ позволяет выполнить более гибкую проверку, включая различные типы пробелов.

$str = " \t\n";
$result = preg_match('/^[\s]*$/', $str);
var_dump($result);
int(1)
Когда что использовать

Функция ctype_space работает быстрее регулярных выражений и проще в использовании для базовых проверок. trim() и empty() полезны, когда нужно также удалить пробелы. preg_match() предоставляет больше гибкости для сложных условий.

Типичные ошибки
Передача нестроковых значений

До PHP 8.1.0 функция пыталась преобразовать нестроковые аргументы в строку. С PHP 8.1.0 такое поведение устарело, а с PHP 9.0.0 будет вызываться TypeError.

// PHP 8.0 и ранее
$result = ctype_space(32); // ASCII код пробела
var_dump($result);
bool(true)
Проверка пустой строки

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

$result = ctype_space('');
var_dump($result);
bool(false)
Игнорирование локали

Функция ctype_space всегда использует текущую локаль, установленную с помощью setlocale(). Некорректная локаль может повлиять на результат.

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

Передача нестроковых аргументов в функции ctype теперь вызывает устаревающее предупреждение. Функция ожидает строку.

// PHP 8.1.0+
$result = ctype_space(32); // Deprecated: ctype_space(): Argument of type int will be interpreted as string
PHP 9.0.0

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

Расширенные примеры применения
Валидация пользовательского ввода

Проверка, что поле формы не содержит только пробелы, перед сохранением.

Пример php
function validateField($value) {
    if (ctype_space($value)) {
        return "Поле не может состоять только из пробелов";
    }
    return null;
}

$input = "   ";
$error = validateField($input);
echo $error ?? 'Валидация пройдена';
Поле не может состоять только из пробелов
Обработка многострочного текста

Определение строк, состоящих только из пробелов, в многострочном тексте.

Пример php
$text = "Первая строка\n   \nТретья строка\n\t\n";
$lines = explode("\n", $text);
foreach ($lines as $index => $line) {
    if (ctype_space($line)) {
        echo "Строка {$index} состоит только из пробелов\n";
    }
}
Строка 1 состоит только из пробелов
Строка 3 состоит только из пробелов
Фильтрация массива строк

Удаление из массива строк, которые состоят только из пробельных символов.

Пример php
$array = ["text", "   ", "\t\n", "another"];
$filtered = array_filter($array, function($item) {
    return !ctype_space($item);
});
print_r($filtered);
Array
(
    [0] => text
    [3] => another
)
Проверка отступов в коде

Определение, состоит ли отступ в начале строки только из пробелов или табуляции.

Пример php
function checkIndent($line) {
    $indent = substr($line, 0, strspn($line, " \t"));
    return ctype_space($indent);
}

$line1 = "    echo 'test';";
$line2 = "\t\tif (true) {";
var_dump(checkIndent($line1));
var_dump(checkIndent($line2));
bool(true)
bool(true)
Аналоги в других языках программирования

Ctype space в Python

Метод строки str.isspace() возвращает True, если все символы в строке являются пробельными.

str1 = "   "
print(str1.isspace())
str2 = "  a  "
print(str2.isspace())
True
False

Ctype space в Javascript

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

function ctypeSpace(str) {
    return /^[\s]*$/.test(str);
}
console.log(ctypeSpace("   "));
console.log(ctypeSpace("  a  "));
true
false

Ctype space в MySQL

Функция TRIM() в сочетании с проверкой на пустоту может эмулировать подобное поведение.

SELECT TRIM('   ') = '' AS is_only_spaces;
is_only_spaces: 1

PHP ctype_space function comments

En
Ctype space Check for whitespace character(s)