Regex de telefone brasileiro
Regex para telefone brasileiro, fixo ou celular, com ou sem DDD, parênteses, hífen e prefixo +55. Confere o formato, não se a linha existe.
O padrão
(?:\+55\s?)?(?:\(?[1-9]\d\)?\s?)?(?:9\d{4}|[2-5]\d{3})-?\d{4}
Flags: nenhuma. Sem âncoras: para validar um campo inteiro use ^(?:padrão)$.
Teste na hora
| Linha | Resultado |
|---|
Tudo roda no seu navegador; nada do que você digita é enviado.
Exemplos
Casam
(11) 91234-5678+55 11 91234-567811912345678(21) 2345-678991234-56782345-6789
Não casam
(11) 1234-5678(00) 91234-56781191234567(11) 91234-567+44 11 91234-5678
Como funciona, por partes
(?:\+55\s?)?: Código do país opcional: +55, seguido de um espaço opcional. O grupo é não capturante e o ponto de interrogação o torna facultativo.(?:\(?[1-9]\d\)?\s?)?: DDD opcional: dois dígitos, o primeiro de 1 a 9, com parênteses também opcionais e espaço depois. Isso aceita (11), 11 e a ausência de DDD, mas recusa DDD começado em zero.9\d{4}: Primeira opção para o número: celular, que começa com 9 e tem cinco dígitos antes do hífen.[2-5]\d{3}: Segunda opção: telefone fixo, com quatro dígitos antes do hífen e primeiro dígito de 2 a 5.-?\d{4}: Hífen opcional e os quatro últimos dígitos, comuns às duas formas.
Armadilhas
- O padrão confere a forma, não a existência. Um número bem formado pode não estar em uso, e só um envio de teste confirma que a linha responde.
- Como o DDD é opcional, o padrão também aceita números locais sem DDD. Se o seu cadastro exige DDD, remova o grupo opcional ou valide o campo com uma regra à parte.
- Os DDDs aceitos vão de 11 a 99, sem consultar a lista oficial de códigos de área. Um DDD que não existe, como 20, passa pelo regex.
- Telefones internacionais com outro código de país não casam. Para um cadastro que receba números de fora, use uma biblioteca de telefonia internacional em vez de adaptar este padrão.
Código pronto
JavaScript
const re = new RegExp("^(?:(?:\\+55\\s?)?(?:\\(?[1-9]\\d\\)?\\s?)?(?:9\\d{4}|[2-5]\\d{3})-?\\d{4})$");
console.log(re.test(texto.trim()));
Python
import re
re_telefone_brasileiro = re.compile(r"(?:\+55\s?)?(?:\(?[1-9][0-9]\)?\s?)?(?:9[0-9]{4}|[2-5][0-9]{3})-?[0-9]{4}")
print(bool(re_telefone_brasileiro.fullmatch(texto.strip())))
C#
using System.Text.RegularExpressions;
var re = new Regex(@"^(?:(?:\+55\s?)?(?:\(?[1-9][0-9]\)?\s?)?(?:9[0-9]{4}|[2-5][0-9]{3})-?[0-9]{4})\z");
bool ok = re.IsMatch(texto.Trim());
Perguntas frequentes
Por que o celular começa com 9?
Os celulares brasileiros têm nove dígitos e começam com 9 depois do DDD. O padrão separa esse caso do fixo, que tem oito dígitos, para não aceitar números curtos demais ou longos demais.
Como guardar o telefone no banco?
Normalize para dígitos, com DDD e sem pontuação, ou use o formato internacional E.164 (+5511912345678). Formate apenas na exibição. Assim a busca e a comparação funcionam independentemente de como a pessoa digitou.
Esse regex aceita telefone 0800?
Não. Números 0800 e 4004 têm outra estrutura e não casam com este padrão. Se precisar deles, crie uma alternativa separada em vez de enfraquecer a regra dos telefones comuns.