php проверить содержит ли строка слово
Изучаем PHP: поиск символа в строке
В этой статье рассматриваются различные методы поиска слова, символа или подстроки в тексте. Описываются преимущества и недостатки каждого метода.
Поиск символа в строке — использование strpos() для регистрозависимого поиска
Простейшим способом проверить, содержит ли строка определённое слово, является использование PHP функции strpos(). Она возвращает позицию первого вхождения подстроки в строке или FALSE, если соответствия не найдены. Поэтому можно сравнить значение, возвращаемое функцией strpos() с FALSE, чтобы проверить наличие подстроки. Пример:
При поиске целого слова (например, “на”) функция также вернёт значение TRUE, если строка содержит такие слова, как “она”, “вена” или “например”.
Поиск символа в строке — использование функции stripos() для регистронезависимого поиска
Для регистрозависимого поиска можно использовать функцию stripos(). Она работает аналогично функции strpos(). Единственное отличие заключается в том, что она игнорирует регистр при поиске подстроки внутри другой строки.
Функция strpos() вернула бы значение FALSE во всех перечисленных выше случаях. Но функция stripos() проигнорировала регистр и вернула значение TRUE.
Другим способом поиска, независящим от регистра, является преобразование всех строк и подстрок в одинаковый регистр, используя функции strtolower() и strtoupper(). Для проверки можно использовать strpos(). Но проще stripos().
Поиск символа в строке — использование регулярных выражений
Также для поиска можно использовать регулярные выражения. Они лучше подходят для случаев, когда вы ищете в строке более сложные конструкции.
Но помните, что функция strpos() работает в три раза быстрее, чем регулярные выражения. Следующий пример демонстрирует, как с их помощью найти слово, символ в строке:
Использование функции preg_match() имеет смысл только при сложном поиске. Например, для проверки того, содержит ли строка слова с десятью и более символами и т.п. Пример:
Чтобы сделать поиск регистронезависимым, добавьте флаг i в конец шаблона. Пример реализации:
Использование регулярных выражений для поиска точного вхождения слова
Функции strpos() и stripos()работают быстрее, чем регулярные выражения. Но их использование для поиска точного вхождения слова может быть проблематичным.
В подобных ситуациях лучше применять регулярные выражения. Можно использовать выражение b в шаблоне регулярного выражения, чтобы обозначить границу слова. Если слово, которое вы ищете, заключено в выражения b, функция preg_match() найдёт только точные вхождения слова и вернет FALSE для частичных совпадений. Вот пример:
Использование strstr() для поиска подстроки
PHP функция strstr() может быть использована для проверки вхождения символа или подстроки. Она возвращает часть исходной строки, начиная с первого вхождения искомого слова и до конца. Функция вернёт значение FALSE, если подстрока не найдена. Благодаря этому можно проверить, содержит ли строка подстроку. Вот пример:
Для регистронезависимого поиска используйте функцию stristr().
Пожалуйста, оставляйте ваши комментарии по текущей теме материала. Мы крайне благодарны вам за ваши комментарии, подписки, отклики, лайки, дизлайки!
stripos
stripos — Возвращает позицию первого вхождения подстроки без учёта регистра
Описание
Список параметров
Строка, в которой производится поиск.
Заметьте, что needle может содержать строку из одного или более символов.
Если этот параметр указан, то поиск будет начат с указанного количества символов с начала строки. Если задано отрицательное значение, отсчёт позиции начала поиска будет произведён с конца строки.
Возвращаемые значения
Возвращает позицию, в которой находится искомая строка, относительно начала строки haystack (независимо от смещения (offset)). Также обратите внимание на то, что позиция строки отсчитывается от 0, а не от 1.
Список изменений
Примеры
Пример #1 Пример использования stripos()
= ‘a’ ;
$mystring1 = ‘xyz’ ;
$mystring2 = ‘ABC’ ;
Примечания
Замечание: Эта функция безопасна для обработки данных в двоичной форме.
Смотрите также
User Contributed Notes 8 notes
I found myself needing to find the first position of multiple needles in one haystack. So I wrote this little function:
Regarding the function by spam at wikicms dot org
It is very bad practice to use the same function name as an existing php function but have a different output format. Someone maintaining the code in the future is likely to be very confused by this. It will also be hard to eradicate from a codebase because the naming is identical so each use of stripos() would have to be analyzed to see how it is expecting the output format (bool or number/bool).
Calling it string_found() or something like that would make a lot more sense for long-term use.
Finding numbers in strings requires you to cast the number to string first.
A handy function if you need to adjust layout based on whether or not a string contains descending letters:
If you like using ternary operator, I wrote simple example how to use stripos function.
Also, in my example I add «How to use namespaces» for wide knowledges for newbies.
this would to work with any language, i hope.
tested on czech (eastern europe) lang.
strpos
(PHP 4, PHP 5, PHP 7, PHP 8)
strpos — Возвращает позицию первого вхождения подстроки
Описание
Список параметров
Строка, в которой производится поиск.
Если этот параметр указан, то поиск будет начат с указанного количества символов с начала строки. Если задано отрицательное значение, отсчёт позиции начала поиска будет произведён с конца строки.
Возвращаемые значения
Возвращает позицию, в которой находится искомая строка, относительно начала строки haystack (независимо от смещения (offset)). Также обратите внимание на то, что позиция строки отсчитывается от 0, а не от 1.
Список изменений
Примеры
Пример #1 Использование ===
Пример #3 Использование смещения
Примечания
Замечание: Эта функция безопасна для обработки данных в двоичной форме.
Смотрите также
User Contributed Notes 38 notes
As strpos may return either FALSE (substring absent) or 0 (substring at start of string), strict versus loose equivalency operators must be used very carefully.
To know that a substring is absent, you must use:
To know that a substring is present (in any position including 0), you can use either of:
To know that a substring is at the start of the string, you must use:
To know that a substring is in any position other than the start, you can use any of:
This is a function I wrote to find all occurrences of a string, using strpos recursively.
It is interesting to be aware of the behavior when the treatment of strings with characters using different encodings.
# Now, encoding the string «Fábio» to utf8, we get some «unexpected» outputs. Every letter that is no in regular ASCII table, will use 4 positions(bytes). The starting point remains like before.
# We cant find the characted, because the haystack string is now encoded.
var_dump ( strpos ( utf8_encode ( «Fábio» ), ‘á’ ));
#bool(false)
# To get the expected result, we need to encode the needle too
var_dump ( strpos ( utf8_encode ( «Fábio» ), utf8_encode ( ‘á’ )));
#int(1)
# And, like said before, «á» occupies 4 positions(bytes)
var_dump ( strpos ( utf8_encode ( «Fábio» ), ‘b’ ));
#int(5)
I lost an hour before I noticed that strpos only returns FALSE as a boolean, never TRUE.. This means that
is a different beast then:
since the latter will never be true. After I found out, The warning in the documentation made a lot more sense.
Warning:
this is not unicode safe
strpos($word,’?’) in e?ez-> 1
strpos($word,’?’) in è?ent-> 2
when you want to know how much of substring occurrences, you’ll use «substr_count».
But, retrieve their positions, will be harder.
So, you can do it by starting with the last occurrence :
Docs are missing that WARNING is issued if needle is » (empty string).
In case of empty haystack it just return false:
Warning: strpos(): Empty needle in /in/lADCh on line 3
bool(false)
Warning: strpos(): Empty needle in /in/lADCh on line 7
bool(false)
Note also that warning text may differ depending on php version, see https://3v4l.org/lADCh
Parse strings between two others in to array.
Can be helpfull to custom parsing 🙂
My version of strpos with needles as an array. Also allows for a string, or an array inside an array.
add quotes to the needle
If you would like to find all occurences of a needle inside a haystack you could use this function strposall($haystack,$needle);. It will return an array with all the strpos’s.
The most straightforward way to prevent this function from returning 0 is:
Note this code example below in PHP 7.3
= «17,25» ;
This just gave me some headache since the value I am checking against comes from the database as an integer.
When a value can be of «unknow» type, I find this conversion trick usefull and more readable than a formal casting (for php7.3+):
Find position of nth occurrence of a string:
This function raises a warning if the offset is not between 0 and the length of string:
Warning: strpos(): Offset not contained in string in %s on line %d
To prevent others from staring at the text, note that the wording of the ‘Return Values’ section is ambiguous.
strpos($myString, ‘b’, 40) returns 43, great.
And now the text: «Returns the position of where the needle exists relative to the beginning of the haystack string (independent of offset).»
So it doesn’t really matter what offset I specify; I’ll get the REAL position of the first occurrence in return, which is 3?
«independent of offset» means, you will get the REAL positions, thus, not relative to your starting point (offset).
Substract your offset from strpos()’s answer, then you have the position relative to YOUR offset.
A function I made to find the first occurrence of a particular needle not enclosed in quotes(single or double). Works for simple nesting (no backslashed nesting allowed).
This might be useful.
if you want to get the position of a substring relative to a substring of your string, BUT in REVERSE way:
Как проверить, содержит ли строка определенное слово?
Например, возможно ли выполнить следующий код?
Ответ 1
Вы можете использовать функцию strpos(), которая используется для поиска вхождения одной строки в другую:
Также теперь в PHP 8 это можно сделать с помощью str_contains:
if (str_contains(‘How are you’, ‘are’)) <
Ответ 2
По производительности strpos примерно в три раза быстрее. Когда я сделал один миллион сравнений за один раз, это заняло для preg_match 1,5 секунды, а на strpos ушло 0,5 секунды.
Чтобы искать любую часть строки, а не только слово за словом, я бы рекомендовал использовать регулярное выражение, например:
Знак « i» в конце регулярного выражения изменяет его на нечувствительность к регистру ; если вам этого не требуется, просто не указывайте его.
Чтобы объединить оба набора функций в единую многоцелевую функцию (в том числе с возможностью выбора чувствительности к регистру), вы можете использовать что-то вроде этого:
Еще одна вещь, о которой следует помнить, это то, что «\b» не будет работать на других языках, кроме английского.
«\b» представляет начало или конец слова (границы слова).
Если вы хотите извлечь символы Unicode, необходимо напрямую определить символы, которые представляют границы слова.
Итак, чтобы использовать это в PHP, можно использовать эту функцию:
// Работает с любыми unicode символами
И если вы хотите найти массив слов, можно использовать это:
echo «Проверка на пустую строку всегда вернет true”;
Ответ 3
Вот небольшая служебная функция, которая может пригодиться в подобных ситуациях :
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
Как проверить, содержит ли строка определенное слово?
30 ответов
можно использовать strpos() функция, которая используется для поиска появления одной строки внутри другой:
вы можете использовать регулярные выражения, это лучше для сопоставления слов по сравнению с strpos, как упоминалось другими пользователями, он также вернет true для строк, таких как тариф, уход, взгляд и т. д. Этого можно просто избежать в регулярном выражении, используя границы слов.
простое совпадение для are может выглядеть примерно так:
на стороне производительности strpos примерно в три раза быстрее и имейте в виду, когда я сделал миллион сравнений сразу, это заняло preg матч 1,5 секунды, чтобы закончить, и для strpos это заняло 0,5 секунды.
вот небольшая функция полезности, которая полезна в таких ситуациях, как это
хотя большинство из этих ответов скажут вам, появляется ли подстрока в вашей строке, это обычно не то, что вы хотите, если вы ищете конкретный слово, а не подстрока.
в чем разница? Подстроки могут появляться в других словах:
один из способов смягчить это было бы использовать регулярное выражение в сочетании с границы слов ( \b ):
если вы хотите что-то более точное, чем это, вам придется начать делать синтаксический анализ английского языка, и это довольно большая банка червей (и предполагает правильное использование синтаксиса, в любом случае, что не всегда задано).
чтобы определить, содержит ли строка другую строку, вы можете использовать функцию PHP strpos().
внимание:
если игла, которую вы ищете, находится в начале стога сена, она вернет позицию 0, если вы сделаете == сравнить, что не будет работать, вам нужно будет сделать ===
A == знак сравнения и проверяет, является ли переменная / выражение / константа слева имеет то же значение, что и переменная / выражение / константа справа.
A === знак сравнения двух переменных / поддерживают выражения / константы равны AND иметь тот же тип, т. е. оба являются строками или оба являются целыми числами.