2014-11-14 4 views
-1

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

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

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

  • «IRCBot находится в самом начале этого Сентанс» бы $ isMentioned правда
  • «Там IRCBot в между этим расчетом "будет делать $ isMentioned false
  • «В конце этого Сентанс является IRCBot» бы $ isMentioned ложных

Я хочу, чтобы вернуть истину, если «IRCBot» является где-нибудь в $ матча [3], а не только начало

+0

_ «' Там это IRCBot между этой sentance' бы $ isMentioned ложь»_ - это просто не ... ну, правда: http://3v4l.org/8Efg4 – CBroe

+0

Обновление: на самом деле отвечает. До тех пор, пока нет ircBot – LunarMage

+0

. Это также неверно. Вышеприведенный код вернет 'true' до тех пор, пока' ircBot' будет _anywhere_ в строке темы - не имеет значения, находится ли он в самом начале, между или в конце и есть ли перед ним пробелы или нет. Это просто то, что 'stripos' _does_. Вы должны проверить, что на самом деле содержит '$ match [3]', похоже, что это не так, как вы думаете ... – CBroe

ответ

0

Используйте stristr вместо

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

Пока только показывается, когда предложение начинается с ircBot – LunarMage

+0

stristr вернет подстроку, когда она будет соответствовать, и false, когда строка не будет существовать. Будь то в начале, середине или конце строки, которую вы ищете. – slapyo

+0

я. До тех пор, пока нет ircBot.Пример: 6ircBot возвращает true, но 6 ircBot не – LunarMage

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

+0

Ни в одном из этих ircBot не отвечает даже в начале – LunarMage

0

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

$isMentioned = stripos('This is in the middle of ircBot the string','ircbot') !== false; 
echo($isMentioned ? 'Is Mentioned' : 'Sad ignored bot'); 
Смежные вопросы