Menu

PHP str_contains(): verificar se uma string contém texto

str_contains($haystack, $needle) retorna true se $needle aparece em qualquer lugar de $haystack. Veja a versão sem diferenciar maiúsculas, str_starts_with e str_ends_with, a verificação de várias palavras e a versão com strpos para o PHP 7.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

str_contains($haystack, $needle) retorna true se $needle aparece em qualquer lugar de $haystack, e false caso contrário. Ele foi adicionado no PHP 8.0 e diferencia maiúsculas e minúsculas.

Ao contrário do strpos(), ele retorna um booleano de verdade, então não existe a armadilha de "encontrado na posição 0 parece false".

Sintaxe

str_contains(string $haystack, string $needle): bool
str_starts_with(string $haystack, string $needle): bool
str_ends_with(string $haystack, string $needle): bool

Os três foram adicionados no PHP 8.0 e trabalham byte a byte, então lidam corretamente com japonês e outros textos UTF-8 sem uma versão mb_.

Verificar o início ou o fim com str_starts_with e str_ends_with

Contém sem diferenciar maiúsculas

Não existe str_icontains(). Deixe as duas strings em minúsculas antes. O mb_strtolower() também converte letras fora do ASCII, como É ou cirílico, que o strtolower() deixa como estão.

A agulha vazia retorna true

Uma agulha vazia é encontrada em qualquer string, inclusive numa vazia. Isso importa quando a agulha vem de uma caixa de busca que o usuário deixou em branco.

Verificar se uma string contém alguma ou todas de várias palavras

O str_contains() recebe uma agulha. Percorra um array de agulhas: retorne assim que uma bater, para "alguma", ou assim que uma falhar, para "todas".

Para verificar se um valor é um dos elementos de um array, e não uma substring de uma string, use in_array().

Antes do PHP 8: strpos !== false

Código que precisa rodar no PHP 7 usa strpos() com comparação estrita. Ele dá a mesma resposta que o str_contains(), exceto para uma agulha vazia: o strpos() do PHP 7 imprimia Warning: strpos(): Empty needle e retornava false.

A última linha imprime bool(false) mesmo com o texto presente, porque php está na posição 0. Trocar essas verificações por str_contains() é uma das atualizações para o PHP 8 mais fáceis.

Perguntas frequentes

Como verifico se uma string contém uma palavra no PHP?

No PHP 8, use str_contains($haystack, $needle), que retorna true ou false: str_contains('Hello world', 'world') é true. No PHP 7, use strpos($haystack, $needle) !== false.

O str_contains diferencia maiúsculas e minúsculas?

Sim. Para uma verificação sem diferenciar, deixe os dois lados em minúsculas: str_contains(mb_strtolower($haystack), mb_strtolower($needle)), ou use stripos($haystack, $needle) !== false.

Por que o str_contains retorna true para uma string vazia?

Toda string contém a string vazia, então str_contains('abc', '') retorna true. Se a agulha vem da entrada do usuário, verifique antes se ela não está vazia.

Como verifico se uma string começa ou termina com algo no PHP?

Use str_starts_with($s, 'http') e str_ends_with($s, '.pdf'), ambos adicionados no PHP 8.0. Como o str_contains(), eles diferenciam maiúsculas e minúsculas e retornam um bool.

Ilustração das linguagens de programação do Coddy

Aprenda a programar com o Coddy

COMEÇAR