Ctype space: примеры (PHP)
ctype_space(mixed $text): boolФункция 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)
Комбинация функций trim() и empty() может определить, содержит ли строка только пробельные символы. trim() удаляет пробелы с обоих концов строки, после чего можно проверить, не стала ли строка пустой.
$str = " ";
$result = trim($str) === '';
var_dump($result);bool(true)
Регулярное выражение /^[\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(). Некорректная локаль может повлиять на результат.
Передача нестроковых аргументов в функции ctype теперь вызывает устаревающее предупреждение. Функция ожидает строку.
// PHP 8.1.0+
$result = ctype_space(32); // Deprecated: ctype_space(): Argument of type int will be interpreted as stringПланируется, что передача нестроковых аргументов будет вызывать TypeError.
Проверка, что поле формы не содержит только пробелы, перед сохранением.
function validateField($value) {
if (ctype_space($value)) {
return "Поле не может состоять только из пробелов";
}
return null;
}
$input = " ";
$error = validateField($input);
echo $error ?? 'Валидация пройдена';Поле не может состоять только из пробелов
Определение строк, состоящих только из пробелов, в многострочном тексте.
$text = "Первая строка\n \nТретья строка\n\t\n";
$lines = explode("\n", $text);
foreach ($lines as $index => $line) {
if (ctype_space($line)) {
echo "Строка {$index} состоит только из пробелов\n";
}
}Строка 1 состоит только из пробелов Строка 3 состоит только из пробелов
Удаление из массива строк, которые состоят только из пробельных символов.
$array = ["text", " ", "\t\n", "another"];
$filtered = array_filter($array, function($item) {
return !ctype_space($item);
});
print_r($filtered);Array
(
[0] => text
[3] => another
)Определение, состоит ли отступ в начале строки только из пробелов или табуляции.
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