Очень часто возникает необходимость найти слово в строке методами PHP. Причины для этого могут быть совершенно разные. Для опытного веб-программиста эта задача не вызывает затруднений, однако у начинающих разработчиков могут возникнуть серьезные трудности.
В одной из самописных форм обратной связи я решил добавить проверку текстового поля на содержание слова «href», так как через эту форму регулярно поступал ссылочный спам с множеством таких элементов. href, как вы уже поняли — это фрагмент html кода, который спам-бот пытается внедрить на страницу сайта, но лишь огорчает меня спамом, который сыпется на емайл.
Итак искать «href» мы будем средствами регулярных выражений. Не буду вдаваться в подробности и забивать вам голову теорией и возможностями регулярных выражений. Просто решу конкретную задачу.
Поиск слов и наборов символов в строке осущесвляется с помощью функции preg_match.
Составим проверку:
if(preg_match(«/href/i»,$message))
die(«Убей себя об стену, спаммер»);
else {
/* выполняем скрипт дальше */
}
В указанном выше примере сообщение $message проверяется на наличие фрагмента «href» и если находит его — прерывает выполнение скрипта. Под действие этого условия попадут все комбинации, включая просто «href» и «href=». Т.е. не имеет значение есть ли символы до и после комбинации «href».
Иногда бывает нужно найти именно СЛОВО, а не фрагмент строки как у меня в примере. В этом случае нужно изменить наше условие на такое:
if(preg_match("/\bhref\b/i",$message))
Т.е. добавить перед href и после него символы «\b«. Этот символ обозначает границы слова. Т.е. если мой скрипт будет работать с этим условием, а не с первым, то под действие скрипта попадут только комбинации «href», отделенные от остальной строки пробелами, разрывами строк и прочее, а «href=» уже не подпадет под это условие.