stripos

(PHP 5, PHP 7, PHP 8)

striposВозвращает позицию первого вхождения подстроки без учёта регистра

Описание

stripos(string $haystack, string $needle, int $offset = 0): int|false

Ищет позицию первого вхождения подстроки needle в строке haystack.

В отличие от strpos(), эта функция не учитывает регистр символов.

Список параметров

haystack

Строка, в которой производится поиск.

needle

Строка для поиска.

До PHP 8.0.0, если параметр needle — не строка, он преобразовывается в целое число и трактуется как код символа. Это поведение устарело с PHP 7.3.0 и полагаться на него крайне не рекомендуется. В зависимости от предполагаемого поведения, параметр needle должен быть либо явно приведён к строке, либо должен быть выполнен явный вызов функции chr().

offset

Если этот параметр указан, то поиск будет начат с указанного количества символов с начала строки. Если задано отрицательное значение, отсчёт позиции начала поиска будет произведён с конца строки.

Возвращаемые значения

Возвращает позицию, в которой находится искомая строка, относительно начала строки haystack (независимо от смещения (offset)). Также обратите внимание на то, что позиция строки отсчитывается от 0, а не от 1.

Возвращает false, если искомая строка не найдена.

Внимание

Функция возвращает как логическое значение false, так и нелогическое значение, которое приводится к false. Прочитайте раздел «Логический тип», чтобы получить дополнительную информацию. Используйте оператор === для проверки значения, которое возвращает функция.

Список изменений

Версия Описание
8.2.0 Приведение к единому регистру больше не зависит от региональных настроек, которые установили функцией setlocale(). Преобразовываются только символы кодировки ASCII. Байты, которые не относятся к кодировке ASCII, сравнятся по значению байта.
8.0.0 Параметр needle теперь разрешает пустую строку.
8.0.0 Передача целого числа (int) в needle больше не поддерживается.
7.3.0 Передача целого числа (int) в needle объявлена устаревшей.
7.1.0 Добавлена поддержка отрицательных значений offset.

Примеры

Пример #1 Пример использования stripos()

<?php
$findme
= 'a';
$mystring1 = 'xyz';
$mystring2 = 'ABC';

$pos1 = stripos($mystring1, $findme);
$pos2 = stripos($mystring2, $findme);

// Конечно, 'a' не входит в 'xyz'
if ($pos1 === false) {
echo
"Строка '$findme' не найдена в строке '$mystring1'";
}

// Заметьте, что используется ===. Использование == не даст верного
// результата, так как 'a' в нулевой позиции.
if ($pos2 !== false) {
echo
"Нашёл '$findme' в '$mystring2' в позиции $pos2";
}
?>

Примечания

Замечание: Функция безопасна для обработки данных в двоичной форме.

Смотрите также

  • mb_stripos() - Находит позицию первого вхождения подстроки в строку без учёта регистра
  • str_contains() - Определяет, содержит ли строка заданную подстроку
  • str_ends_with() - Проверяет, заканчивается ли строка заданной подстрокой
  • str_starts_with() - Проверяет, начинается ли строка с заданной подстроки
  • strpos() - Находит позицию первого вхождения подстроки
  • strrpos() - Возвращает позицию последнего вхождения подстроки в строке
  • strripos() - Возвращает позицию последнего вхождения подстроки без учёта регистра
  • stristr() - Регистронезависимый вариант функции strstr
  • substr() - Возвращает подстроку
  • str_ireplace() - Регистронезависимый вариант функции str_replace

Добавить

Примечания пользователей 5 notes

up
41
emperorshishire at gmail dot com
16 years ago
I found myself needing to find the first position of multiple needles in one haystack. So I wrote this little function:

<?php
function multineedle_stripos($haystack, $needles, $offset=0) {
foreach(
$needles as $needle) {
$found[$needle] = stripos($haystack, $needle, $offset);
}
return
$found;
}

// It works as such:
$haystack = "The quick brown fox jumps over the lazy dog.";
$needle = array("fox", "dog", ".", "duck")
var_dump(multineedle_stripos($haystack, $needle));
/* Output:
array(3) {
["fox"]=>
int(16)
["dog"]=>
int(40)
["."]=>
int(43)
["duck"]=>
bool(false)
}
*/
?>
up
8
sorrynorealemail at example dot com
6 years ago
Unlike strpos() it seems that stripos() does NOT issue a WARNING if the needle is an empty string ''.
up
3
emanuel dot karlsson at rolfsbuss dot se
6 years ago
Finding numbers in strings requires you to cast the number to string first.

strpos("123", 2) !== strpos("123", "2")
up
4
spam at kleppinger dot com
10 years ago
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.
up
3
Ian Macdonald
9 years ago
Regarding the === note, it might be worth clarifying that the correct tests for a binary found/not found condition are !==false to detect found, and ===false to detect not found.
To Top