Проверка строковых данных: основные алгоритмы и код на PHP
Основные способы проверки строк в PHP
Базовое решение: комбинация is_string() и empty()
Наиболее эффективный способ убедиться, что переменная является непустой строкой. Функция is_string() проверяет тип, а empty() проверяет, что значение не считается пустым (пустая строка, null, false, 0, пустой массив).
<?php
$data = "Hello, world!";
if (is_string($data) && !empty($data)) {
echo "Переменная является непустой строкой";
} else {
echo "Проверка не пройдена";
}
?>Php маленькие буквы (преобразование строки в нижний регистр в php)
Переменная является непустой строкой
Character php (символы php)
Типичные проблемы:
- Использование empty() без предварительной проверки isset() – если переменная не определена, empty() выдаст предупреждение. Рекомендуется предварительно вызвать isset().
- Путаница между пустой строкой и строкой, содержащей пробелы – empty() считает строку с пробелами непустой, что может быть нежелательно. Используйте trim() перед проверкой.
Как определить длину строки?
Для проверки длины используется strlen() (однобайтовые кодировки) или mb_strlen() (многобайтовые).
<?php
$text = "Привет";
$len = mb_strlen($text, 'UTF-8');
if ($len > 0 && $len < 100) {
echo "Длина строки в пределах от 1 до 99 символов";
}
?>
Php new line (символ новой строки в php)
Длина строки в пределах от 1 до 99 символов
Php проверить строку (проверить строку в php)
Ошибка:
Использование strlen() для UTF-8 строк может вернуть количество байт, а не символов. Для кириллицы результат может быть в два раза больше. Всегда применяйте mb_strlen() с указанием кодировки.
Как проверить наличие подстроки?
Функция strpos() находит первое вхождение подстроки, а str_contains() (PHP 8.0+) – булева проверка.
<?php
$url = "https://example.com/page";
if (str_contains($url, 'example.com')) {
echo "URL содержит домен example.com";
}
?>Php пробел (удаление пробелов в php)
URL содержит домен example.com
удалить html теги php (php удалить html теги)
Распространённая ошибка:
Использование strpos() без строгого сравнения (===) может привести к ложно-отрицательному результату, если подстрока находится в начале строки (позиция 0).
Неправильно: if (strpos($str, 'abc'))
Правильно: if (strpos($str, 'abc') !== false)
Как проверить начало или конец строки?
С PHP 8.0 появились функции str_starts_with() и str_ends_with().
<?php
$filename = "document.pdf";
if (str_ends_with($filename, '.pdf')) {
echo "Файл является PDF-документом";
}
?>удалить пробел в строке php (php удалить пробелы в строке)
Файл является PDF-документом
Php подстроки (получение подстроки в php)
Как проверить строку с помощью регулярного выражения?
Функция preg_match() позволяет проверить соответствие сложному шаблону.
<?php
$email = "user@example.com";
$pattern = '/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/';
if (preg_match($pattern, $email)) {
echo "Email корректен";
}
?>Php длина строки (длина строки php)
Email корректен
Php str replace (замена в строке php)
Проблемы:
- Регулярные выражения могут быть избыточными для простых проверок.
- Необходимо экранировать специальные символы.
- Производительность ниже, чем у встроенных функций.
Как проверить строку на корректность email, URL или IP?
Используйте фильтры filter_var().
<?php
$email = "test@test.com";
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "Email валидный";
}
?>Php без учета регистра (игнорирование регистра в php)
Email валидный
Str search php (поиск в строке php)
Ограничения:
Фильтры не проверяют существование домена, только формат. Для URL также не проверяется доступность.
Как убедиться, что строка состоит только из цифр или букв?
Функции ctype_digit(), ctype_alpha(), ctype_alnum() проверяют все символы строки.
<?php
$onlyDigits = "12345";
if (ctype_digit($onlyDigits)) {
echo "Строка состоит только из цифр";
}
?>Php первые символов (получение первых символов строки в php)
Строка состоит только из цифр
Важно:
Эти функции не работают с пустой строкой (возвращают false). Не подходят для многобайтовых кодировок (только ASCII). Для UTF-8 используйте preg_match() с модификатором 'u'.
Расширенные примеры проверки строк в PHP
Использование null coalescing для проверки существования и типа
Оператор ?? позволяет задать значение по умолчанию, если переменная не определена или равна null.
<?php
$input = $_GET['name'] ?? null;
if (is_string($input) && strlen($input) > 0) {
echo "Получено имя: $input";
} else {
echo "Имя не указано или не строка";
}
?>Имя не указано или не строка (при отсутствии параметра)
Комбинация preg_match с именованными группами
Для извлечения данных из строки с проверкой.
<?php
$dateStr = "2024-03-15";
$pattern = '/^(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2}$)/';
if (preg_match($pattern, $dateStr, $matches)) {
echo "Год: {$matches['year']}, месяц: {$matches['month']}, день: {$matches['day']}";
} else {
echo "Неверный формат даты";
}
?>Год: 2024, месяц: 03, день: 15
Проверка строки с учётом BOM (Byte Order Mark)
UTF-8 BOM может мешать проверкам.
<?php
$str = "\xEF\xBB\xBFПривет"; // строка с BOM
$bom = pack('H*','EFBBBF');
$clean = ltrim($str, $bom);
if (str_starts_with($clean, 'Привет')) {
echo "BOM удалён, строка начинается с 'Привет'";
}
?>BOM удалён, строка начинается с 'Привет'
Проверка, является ли строка корректным JSON
<?php
function is_valid_json($string) {
json_decode($string);
return json_last_error() === JSON_ERROR_NONE;
}
$json = '{"name": "John"}';
if (is_valid_json($json)) {
echo "Это валидный JSON";
}
?>Это валидный JSON
Фильтрация пустых строк из массива с использованием array_filter
<?php
$lines = ['first', '', 'second', ' ', 'third'];
$nonEmpty = array_filter($lines, function($v) {
return is_string($v) && strlen(trim($v)) > 0;
});
print_r($nonEmpty);
?>Array
(
[0] => first
[2] => second
[4] => third
)Проверка расширения файла с помощью str_ends_with
<?php
$allowedExtensions = ['jpg', 'png', 'gif'];
$filename = 'photo.JPG';
$ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
if (in_array($ext, $allowedExtensions)) {
echo "Допустимое расширение файла";
} else {
echo "Недопустимый формат";
}
?>Допустимое расширение файла
Проверка строки на наличие только определённых символов с помощью preg_match и якоря
<?php
$username = "user_123";
// только буквы, цифры и подчёркивание
if (preg_match('/^[a-zA-Z0-9_]+$/', $username)) {
echo "Имя пользователя корректно";
} else {
echo "Имя содержит недопустимые символы";
}
?>Имя пользователя корректно
Использование mb_ereg для многобайтовых регулярных выражений
<?php
if (mb_ereg('^[а-яА-ЯёЁ ]+$', 'Привет мир')) {
echo "Только русские буквы и пробелы";
} else {
echo "Есть другие символы";
}
?>Только русские буквы и пробелы