PHP Conference Nagoya 2025

stripos

(PHP 5, PHP 7, PHP 8)

striposEncontra a posição da primeira ocorrência de uma substring em uma string, de forma insensível a maiúsculas/minúsculas

Descrição

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

Encontra a posição da primeira ocorrência de needle na sring haystack.

Diferentemente de strpos(), stripos() é insensível a maiúsculas/minúsculas.

Parâmetros

haystack

A string onde a substring será procurada.

needle

A substring sendo pesquisada.

Antes do PHP 8.0.0, se needle não for uma string, ela será convertida para um número inteiro e aplicada como o valor ordinal de um caractere. Este comportamento tornou-se defasado a partir do PHP 7.3.0 e depender dele é altamente desaconselhado. Dependendo do comportamento pretendido, o parâmetro needle deve ser explicitamente convertido em string ou uma chamada explícita para chr() deve ser realizada.

offset

Se especificado, a pesquisa iniciará nesse número de caracteres contados a partir do início da string. Se o deslocamento for negativo, a busca iniciará nesse número de caracteres contados a partir do final da string.

Valor Retornado

Retorna a posição onde a substring pesquisada existe em relação ao início da string haystack (independente do deslocamento). Observe também que as posições das strings começam em 0 e não em 1.

Retorna false se a substring não for encontrada.

Aviso

Esta função pode retornar o valor booleano false, mas também pode retornar um valor não booleano que pode ser avaliado como false. Leia a seção sobre Booleanos para mais informações. Use o operador === para testar o valor retornado por esta função.

Registro de Alterações

Versão Descrição
8.2.0 A redução de todas as letras a maiúsculas ou minúsculas não depende mais da localidade definida com setlocale(). Somente a redução de todas as letras ASCII a maiúsculas ou minúsculas será feita. Os bytes não ASCII serão comparados por seu valor de byte.
8.0.0 O parâmetro needle agora aceita uma string vazia.
8.0.0 Passar um int em needle não é mais suportado.
7.3.0 Passar um int em needle se tornou defasado.
7.1.0 Suporte para valores negativos em offset foi adicionado.

Exemplos

Exemplo #1 Exemplos de stripos()

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

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

// Não, 'a' certamente não existe em 'xyz'
if ($pos1 === false) {
echo
"A string '$findme' não foi encontrada na string '$mystring1'";
}

// Observe o uso de ===. Simplesmente == não iria funcionar como esperado
// porque a posição de 'a' é na posição 0 (primeiro) caractere.
if ($pos2 !== false) {
echo
"Encontrado '$findme' em '$mystring2' na posição $pos2";
}
?>

Notas

Nota: Esta função é compatível com dados binários.

Veja Também

  • mb_stripos() - Encontra a posição da primeira ocorrência de uma string dentro de outra, sem diferenciar maiúsculas de minúsculas
  • str_contains() - Determina se uma string contém uma substring fornecida
  • str_ends_with() - Verifica se uma string termina com uma substring fornecida
  • str_starts_with() - Verifica se uma string começa com uma substring fornecida
  • strpos() - Encontra a posição da primeira ocorrência de uma substring em uma string
  • strrpos() - Encontra a posição da última ocorrência de uma substring em uma string
  • strripos() - Encontra a posição da última ocorrência de uma substring em uma string, insensível a miúsculas/minúsculas
  • stristr() - strstr insensível a maiúsculas/minúsculas
  • substr() - Retorna parte de uma string
  • str_ireplace() - Versão insensível a maiúsculas/minúsculas de str_replace

adicione uma nota

Notas Enviadas por Usuários (em inglês) 5 notes

up
41
emperorshishire at gmail dot com
15 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
5
spam at kleppinger dot com
9 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
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
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