Como verificar se uma string contém uma palavra específica em PHP?

Publicado 27 de agosto de 2024

Método 1: Usando a função strpos() para verificar se uma string PHP contém uma substring

A função strpos() é uma função integrada do PHP que permite verificar se uma string contém uma substring. Ela retorna o índice da primeira ocorrência da substring na string, ou false se a substring não for encontrada.

Como funciona a função strpos()

A função strpos() recebe dois parâmetros:

  1. $haystack: A string na qual pesquisar.
  2. $needle: A substring a ser procurada.

Ela retorna um número inteiro que representa o índice da primeira ocorrência da agulha no palheiro, ou false se a agulha não for encontrada.

Observe que strpos() faz uma pesquisa sensível a maiúsculas e minúsculas. Isso significa que ela considera letras maiúsculas e minúsculas ao procurar pela substring.

Aqui está um exemplo de como usar strpos() para verificar se uma string contém uma palavra:

$palavra = "raposa";
$minha_string = "A rápida raposa marrom pula sobre o cão preguiçoso";

// Testa se a string contém a palavra
if (strpos($minha_string, $palavra) !== false) {
    echo "Palavra encontrada!";
} else {
    echo "Palavra não encontrada!";
}

Neste código:

  • Definimos a variável $palavra como a substring que queremos procurar, que é "raposa".
  • Também temos a variável $minha_string que contém a frase na qual queremos procurar a palavra.
  • Usamos a função strpos() para verificar se $minha_string contém $palavra.
    • Se a palavra for encontrada, strpos() retorna o índice de sua primeira ocorrência.
    • Se a palavra não for encontrada, strpos() retorna false.
  • A condição strpos($minha_string, $palavra) !== false verifica se o valor retornado não é false.
    • Se a palavra for encontrada, a condição é verdadeira e o código no bloco if é executado, imprimindo "Palavra encontrada!".
    • Se a palavra não for encontrada, o bloco else é executado, imprimindo "Palavra não encontrada!".

Exemplo

Digamos que você tenha um formulário em seu site onde os usuários podem inserir seus endereços de e-mail. Você quer verificar os endereços de e-mail para garantir que eles sejam de um domínio específico, como "exemplo.com". Veja como você pode usar strpos() para verificar se o endereço de e-mail contém o domínio:

$email = "usuario@exemplo.com";
$dominio = "exemplo.com";

if (strpos($email, $dominio) !== false) {
    echo "Domínio de e-mail válido!";
} else {
    echo "Domínio de e-mail inválido!";
}

Neste exemplo, verificamos se a string $email contém a substring $dominio. Se contiver, consideramos o endereço de e-mail válido e imprimimos "Domínio de e-mail válido!". Caso contrário, imprimimos "Domínio de e-mail inválido!".

Diferenças entre as funções strpos() e stripos()

O PHP também possui a função stripos(), que é semelhante à strpos(), mas faz uma pesquisa sem distinção entre maiúsculas e minúsculas. Isso significa que stripos() não considera letras maiúsculas e minúsculas ao procurar pela substring.

Você usaria strpos() quando precisa fazer uma pesquisa sensível a maiúsculas e minúsculas e deseja corresponder exatamente ao caso da substring. Você usaria stripos() quando o caso da substring não importa e você quer encontrar a substring independentemente de seu caso.

Aqui está um exemplo para mostrar a diferença:

$palavra = "Raposa";
$minha_string = "A rápida raposa marrom pula sobre o cão preguiçoso";

if (strpos($minha_string, $palavra) !== false) {
    echo "Palavra encontrada usando strpos()!";
} else {
    echo "Palavra não encontrada usando strpos()!";
}

if (stripos($minha_string, $palavra) !== false) {
    echo "Palavra encontrada usando stripos()!";
} else {
    echo "Palavra não encontrada usando stripos()!";
}

Neste caso:

  • strpos() retornaria "Palavra não encontrada!" porque faz uma pesquisa sensível a maiúsculas e minúsculas e a substring "Raposa" (com "R" maiúsculo) não existe na string.
  • stripos() retornaria "Palavra encontrada!" porque faz uma pesquisa sem distinção entre maiúsculas e minúsculas e encontra a substring "raposa" (com "r" minúsculo) na string.

Comparando strpos() com outras funções de busca em strings

O PHP possui outras funções para pesquisar em strings, como strstr(), stristr(), strrchr() e strpbrk(). Aqui está uma comparação dessas funções:

Função Descrição Retorna
strpos() Encontra a posição da primeira ocorrência de uma substring Índice da primeira ocorrência ou false
strstr() Encontra a primeira ocorrência de uma substring Substring a partir da primeira ocorrência ou false
stristr() Versão sem distinção entre maiúsculas e minúsculas de strstr() Substring a partir da primeira ocorrência ou false
strrchr() Encontra a última ocorrência de um caractere Substring a partir da última ocorrência ou false
strpbrk() Procura em uma string por qualquer um de um conjunto de caracteres Substring a partir da primeira ocorrência ou false

Exemplo

$minha_string = "A rápida raposa marrom pula sobre o cão preguiçoso";

// Usando strpos()
$posicao = strpos($minha_string, "raposa");
echo "Posição de 'raposa' usando strpos(): " . $posicao . "\n";

// Usando strstr()
$substring = strstr($minha_string, "marrom");
echo "Substring a partir de 'marrom' usando strstr(): " . $substring . "\n";

// Usando stristr()
$substring = stristr($minha_string, "PULA");
echo "Substring a partir de 'PULA' usando stristr(): " . $substring . "\n";

// Usando strrchr()
$substring = strrchr($minha_string, "o");
echo "Substring a partir do último 'o' usando strrchr(): " . $substring . "\n";

// Usando strpbrk()
$substring = strpbrk($minha_string, "aeiou");
echo "Substring a partir da primeira vogal usando strpbrk(): " . $substring . "\n";

Saída:

Posição de 'raposa' usando strpos(): 9
Substring a partir de 'marrom' usando strstr(): marrom pula sobre o cão preguiçoso
Substring a partir de 'PULA' usando stristr(): pula sobre o cão preguiçoso
Substring a partir do último 'o' usando strrchr(): oso
Substring a partir da primeira vogal usando strpbrk(): a rápida raposa marrom pula sobre o cão preguiçoso

Método 2: Verificar se uma string contém uma palavra usando str_contains() no PHP 8

O PHP 8 adicionou uma nova função chamada str_contains() que facilita a verificação se uma string contém uma substring. Esta função simplifica a busca por uma palavra específica dentro de uma string, melhorando a legibilidade do código e o desempenho.

Função str_contains()

A função str_contains() é nova no PHP 8 e permite verificar se uma string contém uma substring. Ela retorna um valor booleano indicando se a substring foi encontrada dentro da string.

Esta função oferece uma maneira mais simples de realizar esta tarefa comum em comparação com o uso de strpos() ou stripos(), que requerem mais verificações para o valor retornado.

Sintaxe e uso de str_contains()

A função str_contains() tem a seguinte sintaxe:

str_contains(string $haystack, string $needle): bool
  • $haystack: A string na qual pesquisar.
  • $needle: A substring a ser procurada.

A função retorna true se $needle for encontrada dentro de $haystack, e false caso contrário.

Aqui está um exemplo de como usar str_contains() para verificar se uma string contém uma palavra específica:

$texto = "A rápida raposa marrom pula sobre o cão preguiçoso";
$palavra = "raposa";

if (str_contains($texto, $palavra)) {
    echo "A palavra '$palavra' foi encontrada no texto.";
} else {
    echo "A palavra '$palavra' não foi encontrada no texto.";
}

Neste exemplo, str_contains() verifica se a string $texto contém a palavra $palavra. Como a palavra "raposa" está no texto, a função retorna true, e a mensagem "A palavra 'raposa' foi encontrada no texto." é exibida.

Benefícios de usar str_contains() em relação a outros métodos

O uso de str_contains() tem vantagens sobre outros métodos como strpos() e stripos():

  1. Melhor legibilidade: O nome da função str_contains() deixa claro seu propósito, tornando o código mais legível. Ele elimina a necessidade de mais verificações no valor retornado, pois retorna um booleano.

  2. Simplicidade: Com str_contains(), você pode verificar se uma string contém uma substring em uma única chamada de função. Não é necessário comparar o valor retornado com false ou 0, como é necessário com strpos() e stripos().

  3. Melhor desempenho: A função str_contains() foi projetada para ter bom desempenho e é mais rápida que usar strpos() ou stripos() na maioria dos casos. Ela evita retornar a posição da substring, que não é necessária quando você só quer saber se a substring existe.

Método 3: Usando expressões regulares para verificar se uma string PHP contém uma palavra específica

Expressões regulares (regex) são uma ferramenta poderosa para trabalhar com strings em PHP. Elas permitem que você procure por padrões em um texto, não apenas por palavras específicas, tornando-as muito flexíveis para tarefas de manipulação de strings.

Usando preg_match() para verificar se uma string contém uma palavra

A função preg_match() no PHP permite verificar se uma string corresponde a um padrãode expressão regular. Você pode usá-la para verificar se uma string contém uma palavra específica.

A função preg_match() tem a seguinte sintaxe:

preg_match(string $pattern, string $subject, array &$matches = null, int $flags = 0, int $offset = 0): int|false
  • $pattern: O padrão de expressão regular a ser comparado.
  • $subject: A string a ser pesquisada.
  • $matches: (Opcional) Uma matriz a ser preenchida com os resultados da pesquisa.
  • $flags: (Opcional) Flags para modificar o comportamento da pesquisa.
  • $offset: (Opcional) O deslocamento na string para iniciar a pesquisa.

A função retorna o número de correspondências encontradas (0 ou 1), ou false em caso de erro.

Aqui está um exemplo de uso de preg_match() para verificar se uma string contém uma palavra:

$texto = "A rápida raposa marrom pula sobre o cão preguiçoso";
$palavra = "raposa";
$padrao = "/\b$palavra\b/";

if (preg_match($padrao, $texto)) {
    echo "A palavra '$palavra' foi encontrada na string.";
} else {
    echo "A palavra '$palavra' não foi encontrada na string.";
}

Neste código:

  • A variável $texto contém a string a ser pesquisada.
  • A variável $palavra contém a palavra a ser procurada.
  • A variável $padrao contém o padrão de expressão regular. Ela usa a âncora \b para corresponder a limites de palavras, garantindo que apenas palavras inteiras sejam correspondidas (assim "raposa" não corresponderá a "raposas").
  • preg_match() verifica se o $padrao corresponde ao $texto.
    • Se uma correspondência for encontrada, ela retorna 1, e a mensagem "palavra encontrada" é exibida.
    • Se nenhuma correspondência for encontrada, ela retorna 0, e a mensagem "palavra não encontrada" é exibida.

Você também pode usar o parâmetro $matches para obter o texto correspondente:

if (preg_match($padrao, $texto, $matches)) {
    echo "Texto correspondente: " . $matches[0];
}

Isso produziria a saída: "Texto correspondente: raposa".

Exemplo

  1. Validação de e-mail: Você pode usar uma expressão regular para verificar se uma string é um endereço de e-mail válido. Por exemplo:

    $email = "joao.silva@exemplo.com";
    $padrao = "/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/";
    
    if (preg_match($padrao, $email)) {
       echo "Endereço de e-mail válido";
    } else {
       echo "Endereço de e-mail inválido";
    }
  2. Extração de números de telefone: Você pode usar uma expressão regular para obter números de telefone de uma string. Por exemplo:

    $texto = "Ligue para 123-456-7890 ou 987-654-3210";
    $padrao = "/\d{3}-\d{3}-\d{4}/";
    
    if (preg_match_all($padrao, $texto, $matches)) {
       echo "Números de telefone encontrados: " . implode(", ", $matches[0]);
    } else {
       echo "Nenhum número de telefone encontrado";
    }

    Isso produziria a saída: "Números de telefone encontrados: 123-456-7890, 987-654-3210".

  3. Remoção de tags HTML: Você pode usar uma expressão regular para remover tags HTML de uma string. Por exemplo:

    $html = "<p>Olá <b>mundo</b>!</p>";
    $padrao = "/<\/?[a-z][a-z0-9]*[^<>]*>/i";
    
    $texto = preg_replace($padrao, "", $html);
    echo $texto;

    Isso produziria a saída: "Olá mundo!".

Vantagens e desvantagens de usar expressões regulares

As expressões regulares têm vantagens e desvantagens ao verificar se uma string contém uma palavra.

Vantagens

  • Flexibilidade: As regex podem corresponder a padrões complexos, não apenas palavras específicas. Você pode usar classes de caracteres, âncoras, quantificadores e muito mais para definir padrões precisos.
  • Poder: Com regex, você pode fazer mais do que apenas verificar se uma string contém uma palavra. Você pode extrair partes da string, substituir texto, dividir a string e muito mais.

Desvantagens

  • Complexidade: A sintaxe de regex pode ser difícil de ler e escrever, especialmente para padrões complexos. Isso pode tornar o código mais difícil de entender e manter.
  • Desempenho: Para pesquisas de texto simples, usar regex pode ser mais lento do que usar funções de string como strpos() ou str_contains(). As regex precisam compilar o padrão e depois pesquisar a string, o que leva tempo.

Outros métodos para verificar se uma string PHP contém uma palavra específica

Usando a função strstr()

A função strstr() no PHP é outra maneira de verificar se uma string contém uma palavra específica. Ela procura pela primeira ocorrência de uma substring em uma string e retorna o restante da string a partir desse ponto.

A sintaxe para strstr() é a seguinte:

strstr(string $haystack, string $needle, bool $before_needle = false): string|false
  • $haystack: A string na qual pesquisar.
  • $needle: A substring a ser procurada.
  • $before_needle: (Opcional) Se definido como true, a função retorna a parte da string antes da primeira ocorrência da substring. O padrão é false.

Aqui está um exemplo de uso de strstr() para verificar se uma string contém uma palavra:

$texto = "A rápida raposa marrom pula sobre o cão preguiçoso";
$palavra = "raposa";

if (strstr($texto, $palavra)) {
    echo "A palavra '$palavra' foi encontrada na string.";
} else {
    echo "A palavra '$palavra' não foi encontrada na string.";
}

Neste exemplo, strstr() procura pela palavra "raposa" na string $texto. Se a palavra for encontrada, a função retorna a substring a partir da primeira ocorrência de "raposa" até o final da string. A condição if (strstr($texto, $palavra)) verifica se o valor retornado é verdadeiro (não false), indicando que a palavra foi encontrada.

Exemplo

Digamos que você tenha uma lista de descrições de produtos e queira verificar se uma palavra-chave específica é mencionada em cada descrição. Você pode usar strstr() para procurar a palavra-chave em cada string de descrição.

$produtos = [
    "Apple iPhone 12 Pro Max - 128GB - Azul Pacífico",
    "Samsung Galaxy S21 Ultra 5G - 256GB - Preto Fantasma",
    "Google Pixel 5 - 128GB - Preto Simples"
];

$palavra_chave = "iPhone";

foreach ($produtos as $produto) {
    if (strstr($produto, $palavra_chave)) {
        echo "O produto '$produto' contém a palavra-chave '$palavra_chave'.
"; } }

Saída:

O produto 'Apple iPhone 12 Pro Max - 128GB - Azul Pacífico' contém a palavra-chave 'iPhone'.

Dividindo a string em um array com explode()

Outra abordagem para verificar se uma string contém uma palavra específica é dividir a string em um array de palavras usando a função explode() e, em seguida, verificar se a palavra existe no array.

A função explode() divide uma string em um array usando um delimitador especificado. Aqui está a sintaxe:

explode(string $separator, string $string, int $limit = PHP_INT_MAX): array
  • $separator: O delimitador usado para dividir a string.
  • $string: A string a ser dividida.
  • $limit: (Opcional) O número máximo de elementos a serem retornados no array. O padrão é PHP_INT_MAX.

Aqui está um exemplo de uso de explode() para verificar se uma string contém uma palavra:

$texto = "A rápida raposa marrom pula sobre o cão preguiçoso";
$palavra = "raposa";

$arrayPalavras = explode(" ", $texto);

if (in_array($palavra, $arrayPalavras)) {
    echo "A palavra '$palavra' foi encontrada na string.";
} else {
    echo "A palavra '$palavra' não foi encontrada na string.";
}

Neste código, explode(" ", $texto) divide a string $texto em um array de palavras usando o caractere de espaço como delimitador. O array resultante $arrayPalavras contém cada palavra da string como um elemento separado.

A função in_array() é então usada para verificar se a palavra $palavra existe no $arrayPalavras. Se a palavra for encontrada, a função retorna true, e a mensagem correspondente é exibida.

Exemplo

Suponha que você tenha uma funcionalidade de busca em seu site onde os usuários podem inserir várias palavras-chave separadas por vírgulas. Você pode usar explode() para dividir a entrada do usuário em um array de palavras-chave e, em seguida, pesquisar cada palavra-chave em seu banco de dados ou conteúdo.

$entradaUsuario = "maçã, samsung, google";
$palavrasChave = explode(", ", $entradaUsuario);

// Procura por produtos contendo qualquer uma das palavras-chave
$produtos = [
    "Apple iPhone 12 Pro Max - 128GB - Azul Pacífico",
    "Samsung Galaxy S21 Ultra 5G - 256GB - Preto Fantasma",
    "Google Pixel 5 - 128GB - Preto Simples"
];

foreach ($produtos as $produto) {
    foreach ($palavrasChave as $palavraChave) {
        if (strstr($produto, $palavraChave)) {
            echo "O produto '$produto' corresponde à palavra-chave '$palavraChave'.
"; } } }

Saída:

O produto 'Apple iPhone 12 Pro Max - 128GB - Azul Pacífico' corresponde à palavra-chave 'maçã'.
O produto 'Samsung Galaxy S21 Ultra 5G - 256GB - Preto Fantasma' corresponde à palavra-chave 'samsung'.
O produto 'Google Pixel 5 - 128GB - Preto Simples' corresponde à palavra-chave 'google'.

Comparando a string com a palavra usando operadores idênticos

Você também pode verificar se uma string contém uma palavra específica comparando diretamente a string com a palavra usando o operador idêntico ===.

Aqui está um exemplo:

$texto = "raposa";
$palavra = "raposa";

if ($texto === $palavra) {
    echo "A string é idêntica à palavra '$palavra'.";
} else {
    echo "A string não é idêntica à palavra '$palavra'.";
}

Neste caso, a string $texto é diretamente comparada com a palavra $palavra usando o operador ===. Se a string e a palavra forem idênticas, a condição if ($texto === $palavra) é avaliada como true, e a mensagem correspondente é exibida.

No entanto, este método tem limitações:

  • Ele só funciona se a string corresponder exatamente à palavra. Se a string contiver caracteres adicionais ou se a palavra for uma substring da string, a comparação retornará false.
  • É sensível a maiúsculas e minúsculas. Se a string e a palavra tiverem casos diferentes, a comparação retornará false.

Portanto, este método é adequado apenas quando você quer verificar se uma string é idêntica a uma palavra específica, em vez de verificar se a string contém a palavra como uma substring.

Exemplo

Considere um cenário onde você tem uma lista de categorias predefinidas e quer verificar se uma determinada string corresponde exatamente a alguma dessas categorias.

$categorias = ["Eletrônicos", "Roupas", "Casa"];
$categoriaPromuto = "Eletrônicos";

if (in_array($categoriaPromuto, $categorias, true)) {
    echo "A categoria de produto '$categoriaPromuto' é válida.";
} else {
    echo "A categoria de produto '$categoriaPromuto' não é válida.";
}

Neste exemplo, a função in_array() com o terceiro parâmetro definido como true realiza uma comparação estrita (operador idêntico ===) entre a $categoriaPromuto e cada elemento do array $categorias. Se uma correspondência exata for encontrada, a categoria do produto é considerada válida.

Método Descrição Caso de uso
strstr() Procura pela primeira ocorrência de uma substring em uma string Verificar se uma string contém uma palavra específica como substring
explode() Divide uma string em um array por um delimitador especificado Dividir uma string em palavras e verificar se uma palavra específica existe no array
Operador idêntico === Compara uma string diretamente com uma palavra Verificar se uma string corresponde exatamente a uma palavra específica