PHP и серверы

Вхождение строки в строке PHP

📅 ⏱ 06:03 ⏳ 1 мин 💬 0

Вхождение строки в строке php: простыми словами, по шагам и с примерами. Разбираем, как это работает на практике, типичные ошибки и лучшие решения. Раскрываем т

Коротко: проверить, входит ли строка в строку в PHP, можно функциями str_contains() (PHP 8+), strpos(), strstr(), stripos() (без учёта регистра) и mb_strpos() (для UTF-8). Главная ловушка старого strpos() — позиция 0 считается «ложью», нужно сравнение с !== false.

Кому и зачемПроверка «есть ли подстрока» — базовая задача: поиск по тексту, фильтрация значений, разбор URL, проверка вхождения слова. Важно выбрать функцию и не попасть в классическую ошибку с нулевой позицией.

Функции и когда их брать

Функция Что делает Когда брать
str_contains() возвращает true/false PHP 8+, просто проверить вхождение
strpos() позицию первого вхождения нужна позиция или старая версия PHP
stripos() позицию без учёта регистра поиск «нестрого»
strstr() часть строки от вхождения нужно «отрезать» хвост
mb_strpos() позицию для UTF-8 русский текст

Вкладки: примеры кода




CSS
if (str_contains($text, 'php')) {
  echo 'Нашли слово php';
}

Самый читаемый вариант в PHP 8 и новее. Возвращает true/false, никаких сравнений с false не нужно.

CSS
$pos = strpos($text, 'php');

if ($pos !== false) {
  echo 'Вхождение найдено на позиции ' . $pos;
}
Ловушка нуляif (strpos($text, 'php')) — ошибка: если подстрока в самом начале, позиция 0, а 0 — «ложь». Всегда сравнивайте с !== false.

CSS
if (stripos($text, 'php') !== false) {
  echo 'Найдено без учёта регистра';
}

stripos игнорирует регистр: «PHP», «php» и «Php» найдутся одинаково. Возвращает позицию или false.

CSS
if (mb_strpos($text, 'привет') !== false) {
  echo 'Нашли в UTF-8 строке';
}

Для кириллицы важна mb_-функция: обычная считает байты, а не символы, и результат позиции будет неверным. В PHP 8 str_contains работает по байтам, для русского это допустимо при простой проверке вхождения.

Как выбратьPHP 8+ и нужен ответ «да/нет» — str_contains(). Нужна позиция — strpos(). Без учёта регистра — stripos(). Русский текст и точная позиция — mb_strpos().

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

CSS
$needles = ['php', 'css', 'html'];

foreach ($needles as $needle) {
  if (str_contains($text, $needle)) {
    echo 'Найдено: ' . $needle;
  }
}

Для регулярных выражений используют preg_match() — например, поиск по шаблону (/php\d/). Но для простого вхождения регулярка избыточна и медленнее.

Частые ошибки: причина → решение

Симптом Причина Решение
Вхождение в начале не находится if (strpos(...)) сравнивать с !== false
Не находит русский текст байтовая функция mb_strpos()
Находит не то регистр разный stripos() или mb_stripos()
Ошибка про str_contains старая версия PHP обновить PHP или использовать strpos

Проверьте себя

Чек-лист




Почему if (strpos($t, 'a')) — ошибка?




Какая функция вернёт true/false в PHP 8?




Вопросы и ответы

strpos возвращает позицию (число), strstr — часть строки от вхождения до конца (или до начала, если поставить true).

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

Обычные функции считают байты, а русские буквы занимают по два байта в UTF-8. Позиции получаются неверными.

Когда нужен шаблон: цифры, e-mail, конкретный формат. Для простого вхождения подстроки он не нужен.

Итоги

  • PHP 8 — str_contains(); нужна позиция — strpos().
  • Всегда сравнивайте strpos с !== false.
  • Без регистра — stripos(), для русского — mb_strpos().
  • Шаблонный поиск — preg_match().
Поделиться: ВКонтакте Telegram WhatsApp Одноклассники Viber Мой Мир

Комментарии

Пока комментариев нет — будьте первым, кто поделится мнением.

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Получите консультацию нашего маркетолога

Изучит ваш проект, подберет подходящие услуги и тарифы

Получите бесплатный аудит

Наш специалист сделает базовый аудит вашего проекта и предложит персональные предложения.

Закажите услугу Каталог морепродуктов

Наш специалист свяжется с вами в ближайшее время и уточнит детали

Закажите адаптивный сайт

Наш специалист поможет составить Вам техническое задание на разработку сайта

Закажите сайт

Наш специалист поможет составить Вам техническое задание на разработку сайта

Закажите сайт лендинг

Наш специалист поможет составить Вам техническое задание на разработку сайта

Закажите сайт каталог

Наш специалист поможет составить Вам техническое задание на разработку сайта

Закажите интернет-магазин

Наш специалист поможет составить Вам техническое задание на разработку сайта

Закажите веб-приложение

Наш специалист поможет составить Вам техническое задание на разработку сайта

Закажите тариф Аутсорс

Стоимость от 150 000 ₽

Закажите тариф Магазин

Стоимость 90 000 ₽

Закажите тариф Классический

Стоимость 60 000 ₽

Закажите тариф Эконом

Стоимость 40 000 ₽

Закажите SEO продвижение

Наш специалист свяжется с вами, проведет анализ, предложит стоимость