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 foi descontinuado 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 foi descontinuado.
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
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