PHP: Verificar se String contém outra String (com Exemplos)

Existem diversas maneiras de verificar se uma string contém uma palavra ou substring em PHP. Veja os exemplos abaixo e entenda quais as formas mais utilizadas.

Verificando se string contém substring

Usando str_contains (PHP 8)

Para o futuro, a função oficial será a str_contains(), pois faz exatamente o que precisamos. Porém ela só está disponível a partir do PHP 8. Caso você tenha condições de usar, veja como fica:

if (str_contains('Olá mundo', 'mundo')) {
	echo 'true';
}


Usando mb_strpos()

A função mb_strpos() é a forma mais comum de se verificar a ocorrência de uma string dentro de outra. Ela é similar à função strpos(), só que tem suporte à todos os caracteres unicode, incluindo emojis. Ela retorna um inteiro indicando a posição da substring dentro da string, ou false se não encontrar nada.

if (mb_strpos('Olá mundo', 'Olá') !== false) {
	echo 'true';
}

A forma correta de se fazer a verificação deve ser como explicitado acima, usando !== false, porque caso a substring pesquisada esteja bem no inicio da string principal, a função vai retornar a posição 0, que é o caso do "Olá" em "Olá mundo". E como 0 pode ser o mesmo que false em um if(), a função retornaria um falso negativo.

Lembre-se que esse método é case sensitive, então caso queira fazer uma verificação independente da caixa do texto, você pode converter para lowercase antes usando o método strtolower().

Usando expressões regulares

De forma alternativa, você também pode utilizar a função preg_match() e fazer a mesma verificação através de uma expressão regular.

$string = 'Olá mundo';
$search = 'Olá';
if (preg_match("/{$search}/", $string)) {
	echo 'true';
}

Caso queira fazer uma verificação case insensitive, basta alterar a expressão regular: /{$search}/i.

Verificando se string contém palavra

Se você precisa verificar se uma palavra completa está presente em uma string, mas não retornar true para fragmentos de outra palavra, como no caso de "pessoa" em "Olá pessoal", você tem algumas alternativas:

Utilizando preg_split e in_array()

Para pegar palavras inteiras, você pode primeiro converter a string em um array, dando um split nos espaços e outros caracteres especiais, e depois verificar se a palavra existe dentro do array.

$string = 'Olá pessoal';
$search = 'pessoal';

if (in_array($search, preg_split('/[ !,.?]+/', $string))) {
	echo 'true';
}
else {
	echo 'false';
}

Expressão regular com word boundary

Para pegar palavras inteiras, e nunca fragmentos de uma palavra, você pode usar \b dentro da expressão regular. O único problema deste método é que ele não funciona com caracteres com acentos. Pois vai separar o "á" de "Olá".

$string = 'Olá pessoal';
$search = 'pessoal';

if (preg_match("/\b{$search}\b/i", $string)) {
	echo 'true';
}
else {
	echo 'false';
}



Este artigo foi útil pra você?

Ricardo Metring

Ricardo Metring

Sou desenvolvedor full stack e co-fundador da Criar.io.
Trabalho há 10 anos com programação e sempre interessado em aprender mais.

Linkedin     Github

Artigos relacionados