Verificar início de string em PHP: de substr a str_starts_with

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

“Fale mais sobre isso”: como descobrir com o que uma string começa em PHP?

\n\n

Todo desenvolvedor já se deparou com a pergunta: “Essa string começa com uma determinada palavra, caractere ou prefixo?”. Parece um detalhe, mas disso pode depender a lógica de roteamento, validação de URL, verificação de email ou análise de entrada do usuário. Em PHP, como em qualquer outra linguagem, existem várias maneiras de resolver esse problema. Mas qual delas é a correta? E qual é a mais performática? E o que fazer se você estiver usando uma versão antiga do PHP?

\n\n

Neste artigo, vamos analisar todas as formas populares de verificar o início de uma string em PHP, desde os clássicos substr e strpos até o moderno str_starts_with, introduzido no PHP 8.0. Você aprenderá não apenas “como”, mas também “por que” escolher cada método. Vamos nessa! 🚀

\n\n

Por que verificar o início de uma string?

\n\n

Imagine que você está criando um parser de logs, processando URLs ou filtrando arquivos por extensão. Ou talvez precise filtrar todos os emails que começam com “admin@”. Ou verificar se uma requisição à API veio com o prefixo correto. Em todos esses casos, você precisa de uma coisa: saber se a string contém uma determinada substring no início.

\n\n

Parece uma tarefa trivial, mas não conhecer os detalhes pode levar a bugs difíceis de encontrar. Especialmente se você usar strpos sem verificar se o retorno é false. Vamos analisar cada método em detalhes.

\n\n

Método #1: str_starts_with (PHP 8.0+) — moderno e óbvio

\n\n

A partir do PHP 8.0, a linguagem ganhou a função str_starts_with(). Ela faz exatamente o que o nome sugere: verifica se uma string começa com uma determinada substring. E faz isso de forma rápida, legível e sem surpresas.

\n\n
<?php\n$url = "https://pythonlib.ru";\nif (str_starts_with($url, "https://")) {\n    echo "A string começa com https://";\n} else {\n    echo "A string NÃO começa com https://";\n}\n// Resultado: A string começa com https://\n?>
\n\n

Por que isso é incrível?

\n
    \n
  • ✅ O código é lido como texto em inglês: “string starts with”.
  • \n
  • ✅ Retorna apenas true ou false — sem verificações extras.
  • \n
  • ✅ Funciona corretamente com codificações multibyte (UTF-8).
  • \n
  • ✅ É sensível a maiúsculas/minúsculas. Para verificação case-insensitive, use str_starts_with(strtolower(...)).
  • \n
\n\n

Este método é o líder absoluto se você usa PHP 8.0 ou superior. Mas e se seu projeto ainda estiver no PHP 7? Continue lendo.

\n\n

Método #2: substr — um velho amigo é melhor que dois novos

\n\n

Antes do str_starts_with, muitos usavam substr para comparar o início de uma string. A ideia é simples: extrair um trecho da string com o comprimento desejado e compará-lo com a substring procurada.

\n\n
<?php\n$string = "Olá, mundo!";\n$prefix = "Olá";\n\nif (substr($string, 0, strlen($prefix)) === $prefix) {\n    echo "A string começa com 'Olá'";\n} else {\n    echo "A string NÃO começa com 'Olá'";\n}\n?>
\n\n

Vantagens:

\n
    \n
  • Funciona em qualquer versão do PHP.
  • \n
  • Lógica clara e direta.
  • \n
\n

Desvantagens:

\n
    \n
  • É necessário lembrar de usar strlen() — fácil errar o comprimento.
  • \n
  • Se a string for mais curta que o prefixo, substr retorna uma string vazia, e a comparação falha (mas não quebra).
  • \n
  • Menos legível que a alternativa moderna.
  • \n
\n\n

Ainda assim, é uma opção totalmente funcional e confiável. O importante é não esquecer de usar a comparação estrita ===.

\n\n

Método #3: strpos — esperto, mas perigoso

\n\n

Outra abordagem clássica é usar strpos(). A função encontra a primeira ocorrência de uma substring

Blogs

Book Recommendations