Documentação / 3 de 5

Máscara de CPF e CNPJ em JavaScript

format aplica os separadores e aceita entradas parciais. Isso permite mostrar um CPF ou CNPJ enquanto a pessoa preenche um formulário, sem exigir todos os caracteres de uma vez.

Formate valores completos ou parciais

import cpf, { cnpj } from 'cpf'

cpf.format('5299822')          // '529.982.2'
cpf.format('52998224725')      // '529.982.247-25'
cnpj.format('12ABC34501DE35')  // '12.ABC.345/01DE-35'

O modo padrão é estrito: rejeita caracteres incompatíveis e valores longos. Para limpar uma entrada durante a digitação, use { strict: false }.

Mostre a máscara durante a digitação

Este exemplo preserva o texto e o cursor do campo, mostrando a máscara em um output separado. Assim, editar no meio do documento e apagar separadores não causa saltos de cursor.

<label for="documento">CNPJ</label>
<input id="documento" type="text" autocapitalize="characters"
       spellcheck="false" aria-describedby="mascara" />
<output id="mascara" for="documento"></output>

Em um projeto JavaScript com suporte a imports npm:

import { cnpj } from 'cpf'

const input = document.querySelector('#documento')
const output = document.querySelector('#mascara')

input.addEventListener('input', () => {
  output.textContent = cnpj.format(input.value, { strict: false })
})

Para CPF, troque cnpj.format por cpf.format e use inputmode="numeric". Para CNPJ alfanumérico, mantenha um teclado que permita letras.

Se aplicar a máscara no próprio campo a cada tecla, sua integração também precisa preservar a seleção e tratar composição de texto, colagem e exclusão junto aos separadores. A biblioteca formata strings; não gerencia eventos ou o cursor.

Valide a entrada antes de aceitar o formulário

Limpeza permissiva pode descartar caracteres e truncar excessos. Não use o resultado limpo como prova de que a entrada original estava correta. Para aceitar o valor, normalize e valide a entrada original, tratando a exceção de normalização.

function readCnpj(input: string): string | null {
  try {
    const normalized = cnpj.normalize(input)
    return cnpj.isValid(normalized) ? normalized : null
  } catch {
    return null
  }
}

matchesFormat verifica apenas os separadores. Uma máscara correta pode conter verificadores incorretos. Veja validação de CPF e validação de CNPJ alfanumérico.

O guia React mostra como aplicar a máscara ao sair do campo, mantendo a digitação controlada sem reescrever o valor a cada tecla.

Voltar ao início · Relatar um problema