Проверка строковых данных: основные алгоритмы и код на PHP

Раздел: 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 (слова в php (работа со строками))
- Php find (поиск в php)
- Php символ (работа с символами в php)

Расширенные примеры проверки строк в 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 "Есть другие символы";
}
?>
Только русские буквы и пробелы

Проверить строку в PHP - comments

En
Php проверить строку (php)