PHP и серверы

PHP поиск строки в строке

📅 ⏱ 21:10 ⏳ 1 мин 💬 0

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

Коротко: искать подстроку в строке в PHP удобнее всего функцией str_contains() — она возвращает true или false. Для позиции используют strpos(), без учёта регистра — stripos(), для сложных шаблонов — preg_match().

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

Функции поиска

Функция Что возвращает
str_contains() есть или нет
strpos() позицию или false
stripos() позицию без учёта регистра
strstr() часть строки от найденного
preg_match() совпадение по шаблону

Простая проверка

CSS
php
$text = "Ищу слово в строке";

if (str_contains($text, 'слово')) {
  echo 'Найдено';
}

$pos = strpos($text, 'в');      // позиция (байты)
$has = stripos($text, 'ИЩУ') !== false; // без регистра

str_contains() читается лучше всего: результат сразу логический. strpos() даёт позицию, но важно помнить про строгое сравнение с false.

Вкладки: тонкости



CSS
php
// ошибка: 0 трактуется как «не найдено»
if (strpos($s, 'a')) { … }

// правильно
if (strpos($s, 'a') !== false) { … }

Если подстрока в самом начале, strpos() вернёт 0, а это «ложное» значение. Поэтому сравнение всегда строгое — !== false.

CODE
php
mb_strpos($text, 'сло', 0, 'UTF-8');

Для кириллицы позицию считают в символах через mb_strpos(), иначе получите номер байта, а не символа. Для проверки наличия используйте str_contains — она работает с байтами и подходит для UTF-8.

CSS
php
if (preg_match('/\d+/', $text)) {
  echo 'Есть цифры';
}

preg_match() нужен для поиска по шаблону: цифры, email, телефон, конкретный формат. Для простого текста он избыточен.

Частая ошибкаstrpos() возвращает 0, если подстрока найдена в начале, и false, если не найдена. Сравнение через == или в if напрямую приведёт к неверному результату — всегда используйте !== false.

Практика: найти строку

  1. Нужно просто наличие — str_contains().
  2. Нужна позиция — strpos() со строгим сравнением.
  3. Регистр не важен — stripos().
  4. Кириллица и позиция — mb_strpos().
  5. Сложный шаблон — preg_match().
  6. Проверьте результат на тестовых строках.

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

Симптом Причина Решение
«Не найдено» в начале строки не строгое сравнение !== false
Неверная позиция кириллицы strpos в байтах mb_strpos
Регистр мешает использован strpos stripos
Слишком громоздко регулярка для простого str_contains
Ошибки на спецсимволах шаблон без экранирования экранировать preg_quote

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

Чек-лист




Какая функция скажет, есть ли подстрока?




Что вернёт strpos(), если подстрока в начале?




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

Значит, подстрока не найдена. Но осторожно: 0 — тоже «ложное» значение, поэтому проверять результат нужно строго через !== false.

str_contains сразу возвращает true или false — удобно для проверки. strpos возвращает позицию, что нужно, если важно, где именно найдено.

Функцией stripos() или приведя обе строки к одному регистру. Для проверки наличия можно также сравнить результат strtolower() обеих строк.

Когда ищем не конкретный текст, а шаблон: email, телефон, дату, набор цифр. Для обычной подстроки он избыточен и медленнее.

Итоги

  • Проверить наличие — str_contains().
  • Позицию даёт strpos(), без регистра — stripos().
  • Сравнивайте результат строго: !== false.
  • Для кириллицы в символах используют mb_strpos().
Поделиться: ВКонтакте Telegram WhatsApp Одноклассники Viber Мой Мир

Комментарии

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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