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

Добрый вечер.
Я создаю бот IRC, который отвечает, когда вы упоминаете его. Я хочу знать, как заставить его отвечать, когда кто-то на самом деле произносит его имя. Это то, что я имею до сих пор ($ match [3] — это сообщение, которое кто-то сказал на канале, и да, stripos, потому что я хочу, чтобы оно не чувствительно к регистру):

if (stripos($match[3], "ircBot") !== false) {
$isMentioned = true;
}else { $isMentioned = false; }

хотя в действительности это обнаруживает, произнес ли кто-то свое имя, это работает, только если он упоминается в самом начале сообщения, например:

  • «ircBot находится в начале этого сообщения», что делает $ isMentioned истинным
  • «Между этими сообщениями есть ircBot», что делает $ isMentioned ложным
  • «В конце этой отправки isrcbot» сделает $ isMentioned false

Я хочу, чтобы он возвращал истину, если «ircBot» в любом месте внутри $ match [3], а не только в начале

-1

Решение

Вы должны искать границы слов, чтобы избежать кого-то по имени MircBot

// using in_array
$isMentioned = in_array('ircbot', preg_split('/\s+/', mb_strtolower($match[3])));

// using regex word boundaries
$isMentioned = preg_match('/\b(ircBot)\b/i', $match[3]);

http://3v4l.org/lh3JT

1

Другие решения

использование stristr вместо

if (stristr($match[3], "ircBot") !== false) {
$isMentioned = true;
}else { $isMentioned = false; }
0

Я думаю, что ваша ошибка в другом месте, например построение $ match [3]. Это отлично работает:

$isMentioned = stripos('This is in the middle of ircBot the string','ircbot') !== false;
echo( $isMentioned ? 'Is Mentioned' : 'Sad ignored bot');
0
По вопросам рекламы [email protected]