Verificando o início de uma string em PHP: todas as formas e armadilhas

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

«Minha string começa com esta palavra?» — a pergunta eterna do desenvolvedor PHP

\n\n

Imagine a situação: você está escrevendo um parser de URL, processando requisições de entrada ou simplesmente filtrando uma lista de arquivos. E surge a tarefa — precisa verificar se a string começa com um determinado conjunto de caracteres. Parece simples, certo? Mas não é bem assim. Até recentemente, o PHP não tinha uma função nativa para esta operação tão simples. Os desenvolvedores se viravam como podiam: uns cortavam a string com substr(), outros procuravam a posição com strpos(), e outros ainda mergulhavam no mundo das expressões regulares.

\n\n

Neste artigo, vamos detalhar todas as formas de verificar o início de uma string em PHP. Você aprenderá não apenas como fazer isso "com elegância" nas versões modernas, mas também como resolver o problema em projetos "legados", onde o PHP 5 ainda é usado. Vamos lá!

\n\n

A forma mais correta: str_starts_with() (PHP 8.0+)

\n\n

Se o seu projeto roda em PHP 8.0 ou superior — você tem sorte. Você tem acesso à função nativa str_starts_with(), que faz exatamente o que o nome diz. Ela recebe dois argumentos: a string original e a substring que procuramos no início. Retorna true ou false.

\n\n
<?php\n$url = "https://pythonlib.ru/php-tutorial";\n\nif (str_starts_with($url, "https://")) {\n    echo "Link seguro, usando HTTPS";\n} else {\n    echo "Atenção! Conexão não HTTPS";\n}\n// Exibirá: Link seguro, usando HTTPS\n?>
\n\n

Por que esta é a melhor opção?

\n
    \n
  • Legibilidade — o código fala por si. Você não precisa comentar o que esta linha faz.
  • \n
  • Desempenho — a função é otimizada no nível do código C do PHP. Ela funciona mais rápido do que verificações manuais.
  • \n
  • Segurança — sem problemas com codificações multibyte (a menos que você trabalhe com UTF-8 de forma especial, mas falaremos sobre isso depois).
  • \n
\n\n

A propósito, a função tem uma "irmã gêmea" — str_ends_with(), que verifica o final da string. Mas isso já é assunto para outro artigo.

\n\n

O clássico: strpos()

\n\n

Antes do surgimento do str_starts_with(), a forma mais popular era usar a função strpos(). Ela procura a primeira ocorrência de uma substring na string e retorna sua posição (número). Se a substring não for encontrada — retorna false.

\n\n

O truque é que, se a substring estiver bem no início, sua posição será 0. E 0 em PHP é um valor falsy. Portanto, a verificação deve ser estrita:

\n\n
<?php\n$string = "Olá, mundo!";\n\nif (strpos($string, "Olá") === 0) {\n    echo "A string começa com Olá";\n} else {\n    echo "Não, o início é diferente";\n}\n?>
\n\n

Importante! Sempre use o operador de comparação estrita ===, e não ==. Por quê? Imagine que você está procurando uma substring que não existe. strpos() retornará false. Se você escrever strpos($string, "teste") == 0, então false == 0 resultará em true (porque o PHP faz coerção de tipos). E seu código dirá que a string começa com "teste", quando não é verdade. Uma armadilha clássica para iniciantes!

\n\n

Prós e contras do strpos()

\n
    \n
  • ✅ Funciona em todas as versões do PHP, a partir da 4.
  • \n
  • ✅ Não requer instalação de extensões.
  • \n
  • ❌ Código menos legível — é preciso lembrar da comparação estrita.
  • \n
  • ❌ Se usado incorretamente (sem ===), causa bugs difíceis de encontrar.
  • \n
\n\n

O método do avô: substr()

\n\n

Outra forma que veio das profundezas da história. A ideia é simples: extrair da string um trecho do mesmo tamanho da substring procurada e compará-los.

\n\n
<?php\n$filename = "relatorio_2024.pdf";\n\n$prefix = "relatorio_";\nif (substr($filename, 0, strlen($prefix)) === $prefix) {\n    echo "Este é o relatório de 2024";                

Blogs

Book Recommendations