W3docs

stristr()

Функция stristr() в PHP находит первое вхождение подстроки в строке без учёта регистра и возвращает часть строки начиная с этого места.

Введение

stristr() — это строковая функция PHP, которая находит первое вхождение подстроки в строке, игнорируя регистр букв, и возвращает всё начиная с этого места до конца строки. Если подстрока не найдена, возвращается false.

Это аналог strstr() без учёта регистра. Используйте stristr(), когда при поиске Hello, HELLO и hello должны считаться одинаковыми — например при поиске ключевых слов, введённых пользователем, разборе адреса электронной почты или разбивке строки по разделителю вне зависимости от регистра.

На этой странице рассматриваются синтаксис, возвращаемое значение, необязательный параметр $before_needle, типичные ошибки, а также отличие stristr() от связанных функций.

Синтаксис

stristr(string $haystack, string $needle, bool $before_needle = false): string|false
ПараметрОписание
$haystackСтрока, в которой выполняется поиск.
$needleИскомая подстрока. Сравнение без учёта регистра.
$before_needleНеобязательный. Если true, возвращает часть $haystack до первого совпадения, а не после него.

Возвращаемое значение: найденная часть $haystack (с сохранением исходного регистра, без приведения к нижнему), либо false, если $needle не найдена.

Базовый пример

php— editable, runs on the server

Хотя мы искали "BROWN" в верхнем регистре, stristr() нашла строчное brown в тексте и вернула остаток предложения начиная с этого слова — с сохранением исходного регистра.

Получение части строки до совпадения

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

<?php

$email = "[email protected]";

$after  = stristr($email, "@");        // from "@" onward
$before = stristr($email, "@", true);  // up to (not including) "@"

echo $after . "\n";   // @Example.com
echo $before . "\n";  // User

Проверка наличия подстроки

Распространённая ошибка — использовать stristr() как булевое условие. Это работает, но необходимо сравнивать со строгим оператором !== и значением false, поскольку возвращаемая строка сама может быть ложной (например "0"):

<?php

$text = "Contact us at [email protected]";

if (stristr($text, "support") !== false) {
  echo "Contains 'support' (any case)";
} else {
  echo "Not found";
}
// Output: Contains 'support' (any case)

Если нужно лишь узнать, существует ли подстрока, а сам фрагмент не нужен — предпочтите stripos() (позиция без учёта регистра) или strpos() (позиция с учётом регистра). Они возвращают индекс совпадения и работают чуть быстрее, так как не копируют остаток строки.

stristr() vs. связанные функции

ФункцияУчёт регистра?Возвращает
stristr()НетНайденная подстрока (или false)
strstr()ДаНайденная подстрока (или false)
stripos()НетИндекс позиции (или false)
strpos()ДаИндекс позиции (или false)

Используйте stristr(), когда нужен текст начиная с совпадения без учёта регистра. Используйте stripos()/strpos(), когда нужна только позиция или ответ да/нет.

Примечания и подводные камни

  • false vs. пустая строка. Успешное совпадение никогда не возвращает пустую строку в начале, но совпадение в самом конце $haystack возвращает только искомую подстроку. Всегда проверяйте с помощью !== false.
  • Регистр игнорируется только при поиске. Возвращаемая подстрока сохраняет регистр из исходного $haystack.
  • Многобайтовый текст / UTF-8. stristr() работает на уровне байтов. Для надёжного сравнения без учёта регистра для символов с диакритикой или нелатинских символов используйте mb_stristr() из расширения mbstring.
  • Нестроковый $needle. Начиная с PHP 8.0 $needle всегда трактуется как строка. В более старых версиях нестроковое значение интерпретировалось как код символа ASCII.

Заключение

stristr() возвращает часть строки начиная с первого совпадения без учёта регистра искомой подстроки, либо false, если совпадений нет — а при $before_needle равном true — часть до совпадения. Используйте её, когда нужен найденный текст вне зависимости от регистра; выбирайте stripos() или strpos(), когда нужна только позиция или проверка наличия.

Практика

Практика
Что выполняет функция 'stristr' в PHP?
Что выполняет функция 'stristr' в PHP?
Was this page helpful?