НейроАгент

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

Узнайте несколько способов проверки, содержит ли строка конкретное слово в PHP. Изучите strpos(), strstr(), str_contains() и preg_match() с примерами и лучшими практиками.

Вопрос

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

Рассмотрим следующий код:

php
$a = 'How are you?';

if ($a contains 'are')
    echo 'true';

Как правильно написать оператор if ($a contains 'are') в PHP?

НейроАгент

В PHP нет ключевого слова или оператора contains, как в некоторых других языках. Чтобы проверить, содержит ли строка определенную подстроку, необходимо использовать встроенные строковые функции. Вот наиболее распространенные методы:

Содержание


Использование функции strpos()

Наиболее традиционный подход - использование функции strpos(), которая находит позицию первого вхождения подстроки:

php
$a = 'How are you?';

if (strpos($a, 'are') !== false) {
    echo 'true';
}

Ключевые моменты:

  • strpos() возвращает позицию (индекс), где найдена подстрока
  • Если подстрока не найдена, функция возвращает false
  • Всегда используйте !== false (не равно И не тождественно) для правильной проверки на false
  • !== важно, потому что strpos() может вернуть 0 (означает найдено в позиции 0), и 0 == false было бы истинно в PHP

Использование функции strstr()

strstr() возвращает часть строки от первого вхождения подстроки до конца:

php
$a = 'How are you?';

if (strstr($a, 'are')) {
    echo 'true';
}

Ключевые моменты:

  • strstr() возвращает подстроку, если найдена, или false, если не найдена
  • Также можно использовать stristr() для поиска без учета регистра
  • Удобнее, когда вам фактически нужна подстрока с точки совпадения

Использование функции str_contains() (PHP 8.0+)

В PHP 8.0 была введена функция str_contains(), которая является наиболее прямым подходом:

php
$a = 'How are you?';

if (str_contains($a, 'are')) {
    echo 'true';
}

Ключевые моменты:

  • Возвращает true, если подстрока найдена, и false в противном случае
  • Much more readable and intuitive than strpos()
  • Доступна только в PHP 8.0 и более поздних версиях
  • По умолчанию чувствительна к регистру

Использование preg_match() для сопоставления с образцом

Для более сложного сопоставления с образцом или регулярных выражений:

php
$a = 'How are you?';

if (preg_match('/are/', $a)) {
    echo 'true';
}

Ключевые моменты:

  • Использует PCRE (Perl Compatible Regular Expressions)
  • Мощно для сложных шаблонов сопоставления
  • Возвращает 1, если шаблон найден, 0, если не найден, или false в случае ошибки
  • Полезно для границ слов, поиска без учета регистра и т.д.

Полный рабочий пример

Вот полный пример, демонстрирующий все методы:

php
$text = 'How are you today?';
$search = 'are';

// Метод 1: strpos()
if (strpos($text, $search) !== false) {
    echo "Найдено с использованием strpos()\n";
}

// Метод 2: strstr()
if (strstr($text, $search)) {
    echo "Найдено с использованием strstr()\n";
}

// Метод 3: str_contains() (PHP 8.0+)
if (function_exists('str_contains') && str_contains($text, $search)) {
    echo "Найдено с использованием str_contains()\n";
}

// Метод 4: preg_match()
if (preg_match('/' . preg_quote($search, '/') . '/', $text)) {
    echo "Найдено с использованием preg_match()\n";
}

Лучшие практики

Какой метод выбрать?

  1. PHP 8.0+: Используйте str_contains() для наиболее читаемого и прямого подхода
  2. Legacy PHP: Используйте strpos() !== false для совместимости со старыми версиями
  3. Когда вам нужна найденная подстрока: Используйте strstr()
  4. Сложные шаблоны: Используйте preg_match()

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

Для поиска без учета регистра:

php
// Использование stristr()
if (stristr($text, 'ARE')) {
    echo 'Найдено (без учета регистра)';
}

// Использование preg_match() с флагом без учета регистра
if (preg_match('/are/i', $text)) {
    echo 'Найдено (без учета регистра)';
}

// Использование str_contains() со strtolower (PHP 8.0+)
if (str_contains(strtolower($text), strtolower('ARE'))) {
    echo 'Найдено (без учета регистра)';
}

Проверка целых слов

Чтобы проверить наличие целых слов (а не подстрок внутри слов):

php
// Использование preg_match() с границами слов
if (preg_match('/\bare\b/', $text)) {
    echo 'Найдено целое слово "are"';
}

Проверка нескольких подстрок

Чтобы проверить, содержит ли строка любую из нескольких подстрок:

php
$words = ['are', 'you', 'hello'];

foreach ($words as $word) {
    if (str_contains($text, $word)) {
        echo "Найдено: $word\n";
    }
}

Правильный способ написать ваш исходный код:

php
$a = 'How are you?';

if (str_contains($a, 'are')) {
    echo 'true';
}

Или для старых версий PHP:

php
$a = 'How are you?';

if (strpos($a, 'are') !== false) {
    echo 'true';
}

Источники

  1. Документация PHP str_contains()
  2. Документация PHP strpos()
  3. Документация PHP strstr()
  4. Документация PHP preg_match()

Заключение

Чтобы проверить, содержит ли строка определенное слово в PHP, у вас есть несколько вариантов в зависимости от версии PHP и требований:

  • PHP 8.0+: Используйте str_contains($string, $substring) для наиболее читаемого решения
  • Все версии PHP: Используйте strpos($string, $substring) !== false для максимальной совместимости
  • Когда вам нужен найденный текст: Используйте strstr() или stristr()
  • Для сложных шаблонов: Используйте preg_match() с регулярными выражениями

Выберите метод, который лучше всего соответствует версии PHP вашего проекта и конкретным требованиям. Для современной разработки на PHP str_contains() является предпочтительным выбором благодаря своей простоте и читаемости.