Str contains: примеры (PHP)

Работа с функцией str_contains в PHP: примеры и особенности
Раздел: Работа со строками
str_contains(string haystack, string needle): bool

Функция str_contains в PHP

Описание и назначение

Функция str_contains выполняет проверку наличия подстроки в заданной строке. Она возвращает логическое значение true, если искомая последовательность символов обнаружена, и false в противном случае. Эта функция применяется для валидации входных данных, поиска ключевых слов в тексте, маршрутизации запросов и во многих других сценариях, где требуется определить наличие фрагмента.

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

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

  • $haystack (тип string) – строка, в которой осуществляется поиск.
  • $needle (тип string) – подстрока, наличие которой проверяется.

Если аргумент $needle является пустой строкой (''), функция всегда возвращает true.

Примеры использования str_contains

Базовые проверки
echo str_contains('Привет, мир!', 'мир') ? 'найдено' : 'не найдено';
найдено
var_dump(str_contains('Пример текста', 'текс'));
bool(true)
Регистрозависимость

Поиск с учетом регистра символов.

var_dump(str_contains('PHP 8', 'php'));
bool(false)
Поиск пустой строки
var_dump(str_contains('Любая строка', ''));
bool(true)

Похожие функции в PHP

Функция strpos() возвращает позицию первого вхождения подстроки. Для проверки наличия нужно сравнивать результат с false. Позволяет узнать место нахождения подстроки.

Регистронезависимый аналог strpos(). Используется, когда регистр символов не важен, но требуется позиция.

Возвращает часть строки $haystack начиная с первого вхождения $needle. Удобна для извлечения части строки после найденного фрагмента.

Функция str_contains() является наиболее простым и читаемым вариантом для проверки факта наличия подстроки, появившимся в PHP 8. Функции strpos() и stripos() предпочтительнее, когда необходима позиция вхождения.

Типичные ошибки

Сравнение результата как integer

Попытка интерпретировать булево значение как число — распространенная ошибка.

if(str_contains('abc', 'a') == 1) { // Неверно
    echo "Найдено";
}
// Условие не выполнится, так как true не равно 1 при строгом сравнении
Неправильный порядок аргументов
// Ошибочный вызов: подстрока и строка перепутаны местами
var_dump(str_contains('маленькая', 'большая строка'));
bool(false)
Использование нестроковых аргументов

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

var_dump(str_contains(12345, 23));
bool(true) // Числа приведены к строкам "12345" и "23"

Изменения в версиях PHP

Функция str_contains() была добавлена в язык с релизом PHP 8.0.0. В более ранних версиях языка эта функция отсутствовала. Для обратной совместимости приходилось использовать strpos() с проверкой на тождественное неравенство false.

// Способ для версий до PHP 8.0
if (strpos('Проверяемая строка', 'искомая') !== false) {
    echo 'Найдено';
}

Начиная с PHP 8.0, синтаксис стал более интуитивным и безопасным, так как исключает путаницу с возвращаемыми значениями 0 и false у функции strpos().

Расширенные примеры применения

Проверка нескольких подстрок
Пример php
function containsAny(string $haystack, array $needles): bool {
    foreach ($needles as $needle) {
        if (str_contains($haystack, $needle)) {
            return true;
        }
    }
    return false;
}
$text = "Это пример текста на PHP";
$keywords = ["Python", "пример", "Java"];
var_dump(containsAny($text, $keywords));
bool(true)
Использование в условных конструкциях
Пример php
$userAgent = $_SERVER['HTTP_USER_AGENT'];
if (str_contains($userAgent, 'Firefox')) {
    echo 'Вы используете браузер Firefox';
} elseif (str_contains($userAgent, 'Chrome')) {
    echo 'Вы используете браузер Chrome';
}
Валидация расширений файлов
Пример php
$filename = 'document.pdf';
$allowed = ['.pdf', '.doc', '.txt'];
$isValid = false;
foreach ($allowed as $ext) {
    if (str_contains($filename, $ext)) {
        $isValid = true;
        break;
    }
}
echo $isValid ? 'Разрешено' : 'Запрещено';
Разрешено
Обработка входящих запросов (упрощенно)
Пример php
$requestUri = '/catalog/category/product';
$routes = [
    'admin' => 'Админ-панель',
    'catalog' => 'Каталог товаров',
    'blog' => 'Блог'
];
foreach ($routes as $key => $handler) {
    if (str_contains($requestUri, $key)) {
        echo "Запуск: $handler";
        break;
    }
}
Запуск: Каталог товаров

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

Str contains в Python

Используется оператор in или метод str.find().

text = "Пример текста"
result = "текст" in text
print(result)  # True
True

Str contains в Javascript

Методы String.prototype.includes() (ES6) или String.prototype.indexOf().

let text = "Пример текста";
let result = text.includes("текст");
console.log(result); // true
true

Str contains в MySQL

Оператор LIKE или функция INSTR().

SELECT 'Пример текста' LIKE '%текст%'; -- Возвращает 1 (TRUE)
1

Основное отличие PHP-функции — ее специализация только на проверке наличия, в то время как аналоги в других языках часто возвращают позицию или требуют использования операторов.

PHP str_contains function comments

En
Str contains Determine if a string contains a given substring