Regex para slug de URL

Use /^[a-z0-9]+(?:-[a-z0-9]+)*$/ para verificar se uma string inteira é um slug de URL válido. Todos os exemplos abaixo foram testados contra o padrão, e você pode abri-los no Regex Tester com as amostras já carregadas.

Atualizado em

/^[a-z0-9]+(?:-[a-z0-9]+)*$/
Abrir no Regex Tester
EntradaResultado
regex-tester✓ Corresponde
hello-world-2026✓ Corresponde
a✓ Corresponde
Hello-World✗ Não corresponde
double--dash✗ Não corresponde
-leading✗ Não corresponde
trailing-✗ Não corresponde
with space✗ Não corresponde

Como o padrão funciona

ParteSignificado
[a-z0-9]+Uma ou mais letras minúsculas ou dígitos
(?:-[a-z0-9]+)*Qualquer quantidade de palavras adicionais, cada uma após um único hífen
^…$A string inteira, ou seja, sem hífens no início, no fim ou duplicados

Exemplos de código

JavaScript

const re = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
re.test(value); // true or false

Python

import re

bool(re.fullmatch(r'[a-z0-9]+(?:-[a-z0-9]+)*', value))

PHP

preg_match('/^[a-z0-9]+(?:-[a-z0-9]+)*$/', $value) === 1;

Notas e limitações

Transforme títulos em slugs com o Gerador de Slug.

Perguntas frequentes

Qual é a regex para slug de URL?
/^[a-z0-9]+(?:-[a-z0-9]+)*$/ — ela corresponde à string inteira. Veja a tabela acima para entender o que cada parte faz.
Quais exemplos correspondem?
Dos exemplos testados, estes correspondem: regex-tester, hello-world-2026, a. Os outros não.
Como testo essa regex?
Clique em “Abrir no Regex Tester”. O padrão, as flags e o texto de exemplo são carregados automaticamente, e as correspondências são destacadas conforme você edita.