Menu

PHP str_contains(): проверить, содержит ли строка текст

str_contains($haystack, $needle) возвращает true, если $needle встречается где-либо в $haystack. Версия без учёта регистра, str_starts_with и str_ends_with, проверка нескольких слов и вариант через strpos для PHP 7.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

str_contains($haystack, $needle) возвращает true, если $needle встречается где-либо в $haystack, и false в остальных случаях. Функция появилась в PHP 8.0 и учитывает регистр.

В отличие от strpos(), она возвращает настоящее логическое значение, поэтому ловушки "найдено на позиции 0 выглядит как false" нет.

Синтаксис

str_contains(string $haystack, string $needle): bool
str_starts_with(string $haystack, string $needle): bool
str_ends_with(string $haystack, string $needle): bool

Все три функции появились в PHP 8.0 и работают побайтно, поэтому правильно обрабатывают кириллицу, японский и другой текст в UTF-8 без версии mb_.

Проверка начала или конца через str_starts_with и str_ends_with

Проверка без учёта регистра

str_icontains() не существует. Сначала приведите обе строки к нижнему регистру. mb_strtolower() переводит в нижний регистр и буквы за пределами ASCII, например É или кириллицу, которые strtolower() оставляет как есть.

Пустая игла возвращает true

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

Содержит ли строка любое или все из нескольких слов

str_contains() принимает одну иглу. Пройдите в цикле по массиву игл: для "любое" возвращайте результат при первом совпадении, для "все" при первом несовпадении.

Чтобы проверить, является ли значение одним из элементов массива, а не подстрокой строки, используйте in_array().

До PHP 8: strpos !== false

Код, который должен работать на PHP 7, использует strpos() со строгим сравнением. Ответ тот же, что у str_contains(), кроме пустой иглы: strpos() в PHP 7 печатала Warning: strpos(): Empty needle и возвращала false.

Последняя строка выводит bool(false), хотя текст там есть, потому что php стоит на позиции 0. Замена таких проверок на str_contains() одно из самых простых улучшений при переходе на PHP 8.

Часто задаваемые вопросы

Как проверить, содержит ли строка слово в PHP?

В PHP 8 используйте str_contains($haystack, $needle), она возвращает true или false: str_contains('Hello world', 'world') даёт true. В PHP 7 используйте strpos($haystack, $needle) !== false.

Учитывает ли str_contains регистр?

Да. Для проверки без учёта регистра приведите обе стороны к нижнему регистру: str_contains(mb_strtolower($haystack), mb_strtolower($needle)), или используйте stripos($haystack, $needle) !== false.

Почему str_contains возвращает true для пустой строки?

Любая строка содержит пустую строку, поэтому str_contains('abc', '') возвращает true. Если игла приходит из пользовательского ввода, сначала проверьте, что она не пустая.

Как проверить, начинается или заканчивается ли строка чем-то в PHP?

Используйте str_starts_with($s, 'http') и str_ends_with($s, '.pdf'), обе появились в PHP 8.0. Как и str_contains(), они учитывают регистр и возвращают bool.

Иллюстрация языков программирования Coddy

Учитесь программировать с Coddy

НАЧАТЬ