Skip to content

Instantly share code, notes, and snippets.

@imaginamundo
Last active May 20, 2025 13:40
Show Gist options
  • Save imaginamundo/d689b211e640f40d445a9146fdace407 to your computer and use it in GitHub Desktop.
Save imaginamundo/d689b211e640f40d445a9146fdace407 to your computer and use it in GitHub Desktop.
Regex para padrões de telefones brasileiros com explicação e como usar

Regex para telefones do Brasil

^(55)?(?:([1-9]{2})?)(\d{4,5})(\d{4})$

const regex = /^(55)?(?:([1-9]{2})?)(\d{4,5})(\d{4})$/;

Explicação

  • ^(55)?:

    • Código do país;
    • Exemplo: 55;
    • Opcional.
  • (?:([1-9]{2}))?):

    • Código da cidade;
    • Busca por dois números de 1 à 9.
    • Exemplo: 11
    • Opcional.
  • (\d{4,5})(\d{4}):

    • Número de telefone fixo ou celular;
    • Segue buscando por dois grupos de números, um de 5 ou 4 digitos, que diferencia números de telefones fixos e celulares, e os últimos números que são sempre 4 digitos;
    • Exemplo: 00000000 (8 digitos) ou 000000000 (9 digitos).

Como usar

/**
 * Regex groups for phone format.
 * @param {string} str - The phone number.
 * @returns {string} The str parameter with only numbers.
 */
function (str) {
  const regex = /^(55)?(?:([1-9]{2})?)(\d{4,5})(\d{4})$/;
  return str
    .replace(/\D/g, '')
    .replace(regex,
      (fullMatch, country, ddd, prefixTel, suffixTel) => {
        return fullMatch;
      }
    );
}

Com esse regex você conseguê a separação por código do país, código da cidade, prefixo e sufixo do telefone.

Capacidades numéricas:

  • 1100000000

    • [11][0000][0000]
    • [ddd][prefixTel][suffixTel]
  • 11900000000

    • [11][90000][0000]
    • [ddd][prefixTel][suffixTel]
  • 00000000

    • [0000][0000]
    • [prefixTel][suffixTel]
  • 900000000

    • [90000][0000]
    • [prefixTel][suffixTel]
  • 551100000000

    • [55][11][0000][0000]
    • [country][ddd][prefixTel][suffixTel]
  • 5511900000000

    • [55][11][90000][0000]
    • [country][ddd][prefixTel][suffixTel]

Exemplos da vida real

Formatar telefone

/**
 * Format phone.
 * @param {string} str - The phone number.
 * @returns {string} Formated phone.
 */
function formatPhone(str) {
  const regex = /^(55)?(?:([1-9]{2})?)(\d{4,5})(\d{4})$/;
  return str
    .replace(/\D/g, '')
    .replace(regex,
      (fullMatch, country, ddd, prefixTel, suffixTel) => {
        if (country) return `+${ country } (${ ddd }) ${ prefixTel }-${ suffixTel}`;
        if (ddd) return `(${ ddd }) ${ prefixTel }-${ suffixTel}`;
        if (prefixTel && suffixTel) return `${ prefixTel }-${ suffixTel }`;
        return str;
      }
    );
}

Essa função irá retornar os números assim:

Input: 00000000

Output: 0000-0000


Input: 000000000

Output: 00000-0000


Input: 1100000000

Output: (11) 0000-0000


Input: 551100000000

Output: +55 (11) 0000-0000

@imaginamundo
Copy link
Author

imaginamundo commented May 12, 2025

Obrigado pelas respostas.
Atualizei para deixar o 55 fixo no começo.
Removi a possibilidade de 0 no começo de código de cidade, pesquisei e vi que isso não existe.
Vou deixar como padrão remover tudo que não é número, assim não preciso tratar parenteses, sinal de + do país, espaços, traços ou pontos.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment