SWCore
SWCore / Componentes / Máscara de campo

Máscara de campo Componentes

Formata enquanto a pessoa digita: ela escreve só os números e o campo vira (81) 99999-0000, 123.456.789-09, 50030-000, R$ 1.234,56.

O que é

Ninguém gosta de adivinhar se o telefone vai com parênteses ou se o CPF leva ponto. Com a máscara, a pessoa digita só os números e o campo coloca a pontuação sozinho, no lugar certo, e não deixa passar do tamanho. Você escreve sw-mask="nome-do-formato" no <input>. Tem formatos brasileiros prontos (CPF, CNPJ, CPF-ou-CNPJ, telefone, CEP, data, hora, cartão, dinheiro) e você pode criar o seu com símbolos simples: # para número, A para letra.

Precisa do CSS e do JavaScript do SWCore. A cada tecla, o SWCore pega o que foi digitado, tira o que não serve (letras num CPF, por exemplo) e escreve de novo já formatado. Nos formatos de número, o celular abre o teclado numérico sozinho. Os números "limpos" (sem pontuação) ficam guardados no atributo data-sw-mask-value do campo, prontos para o seu código usar.

Quando usar

  • Cadastro de cliente: CPF, telefone, CEP e data de nascimento.
  • Cadastro de empresa ou nota fiscal: CNPJ — ou document, que aceita CPF e CNPJ no mesmo campo.
  • Preço e valores no painel da loja: dinheiro (com "R$") ou valor (sem).
  • Agendamento: data e hora.
  • Códigos seus (placa de carro, RG, código de produto): máscara própria com sw-mask="custom".
  • A máscara só arruma o formato. Para avisar "campo obrigatório" ou "CPF incompleto", junte com a Validação inline ou a Validação de formulário.

Comece aqui

  1. 1

    Coloque o SWCore na página: o CSS no <head> e o JavaScript antes de fechar o </body>.

    <link rel="stylesheet" href="https://swcore.sanweb.com.br/dist/2.1.0/swcore.min.css">
    <!-- … sua página … -->
    <script src="https://swcore.sanweb.com.br/dist/2.1.0/swcore.min.js"></script>
  2. 2

    Escreva sw-mask com o formato no input. Digite só os números.

    <div sw-fld>
      <label for="tel">WhatsApp</label>
      <input sw-inp id="tel" name="tel" sw-mask="telefone" placeholder="(81) 99999-0000">
    </div>

Todas as variações

Cada quadro abaixo é o componente de verdade, rodando. O código embaixo é exatamente o que está no quadro: copie e cole.

1. Documentos

Digite só os números. O campo não aceita mais números do que o documento tem.

cpf — 000.000.000-00 <input sw-inp sw-mask="cpf" placeholder="000.000.000-00" aria-label="CPF">
cnpj — 00.000.000/0000-00 <input sw-inp sw-mask="cnpj" placeholder="00.000.000/0000-00" aria-label="CNPJ">
document — CPF até 11 números, CNPJ a partir de 12 <input sw-inp sw-mask="document" placeholder="CPF ou CNPJ" aria-label="CPF ou CNPJ">
cep — 00000-000 <input sw-inp sw-mask="cep" placeholder="00000-000" aria-label="CEP">

2. Contato, data e hora

O telefone se ajusta sozinho: com 10 números vira fixo, com 11 vira celular.

telefone — (00) 0000-0000 ou (00) 00000-0000 <input sw-inp sw-mask="telefone" placeholder="(81) 99999-0000" aria-label="Telefone">
data — 00/00/0000 <input sw-inp sw-mask="data" placeholder="dd/mm/aaaa" aria-label="Data">
hora — 00:00 <input sw-inp sw-mask="hora" placeholder="00:00" aria-label="Hora">
cartao — 0000 0000 0000 0000 <input sw-inp sw-mask="cartao" placeholder="0000 0000 0000 0000" aria-label="Cartão">

3. Dinheiro

Os dois últimos números viram os centavos: digite 123456 e aparece 1.234,56; digite 50 e aparece 0,50. Até 15 números.

dinheiro — R$ 1.234,56 (com "R$") <input sw-inp sw-mask="dinheiro" placeholder="R$ 0,00" aria-label="Preço">
valor — 1.234,56 (sem "R$") <input sw-inp sw-mask="valor" placeholder="0,00" aria-label="Valor">
R$
valor com prefixo fixo ao lado <div sw-grp><span sw-adn>R$</span><input sw-inp sw-mask="valor" placeholder="0,00" aria-label="Valor"></div>

4. Máscara própria (custom)

Escreva sw-mask="custom" e o desenho do formato em sw-mask-mask: # = um número, A = uma letra, * = letra ou número. Qualquer outro símbolo (ponto, traço, barra, espaço) entra sozinho.

Placa de carro — AAA-#*## <input sw-inp sw-mask="custom" sw-mask-mask="AAA-#*##" placeholder="ABC-1D23" aria-label="Placa">
RG — ##.###.###-# <input sw-inp sw-mask="custom" sw-mask-mask="##.###.###-#" placeholder="12.345.678-9" aria-label="RG">
Código de produto — AA-#### <input sw-inp sw-mask="custom" sw-mask-mask="AA-####" placeholder="CM-0042" aria-label="Código">
Cupom — ****-**** <input sw-inp sw-mask="custom" sw-mask-mask="****-****" placeholder="AB12-CD34" aria-label="Cupom">

Tabela de opções

PalavraO que fazExemplo
Formatos prontos (valor de sw-mask)
cpf000.000.000-00 (11 números).sw-mask="cpf"
cnpj00.000.000/0000-00 (14 números).sw-mask="cnpj"
documentCPF enquanto tiver até 11 números; CNPJ a partir do 12º.sw-mask="document"
telefone(00) 0000-0000 com 10 números; (00) 00000-0000 com 11. Também aceita o nome phone.sw-mask="telefone"
cep00000-000 (8 números).sw-mask="cep"
data00/00/0000 (8 números). Também aceita o nome date.sw-mask="data"
hora00:00 (4 números).sw-mask="hora"
cartao0000 0000 0000 0000 (16 números).sw-mask="cartao"
dinheiroR$ 1.234,56 — os dois últimos números são os centavos. Até 15 números.sw-mask="dinheiro"
valorIgual ao dinheiro, sem o "R$".sw-mask="valor"
Máscara própria
customUsa o desenho escrito em sw-mask-mask.sw-mask="custom"
sw-mask-mask="…"O desenho do formato.sw-mask-mask="AAA-####"
#No desenho: um número (0–9).
ANo desenho: uma letra (a–z, A–Z).
*No desenho: uma letra ou um número.
. - / ( ) espaço…No desenho: entram sozinhos no lugar deles.
O que ele deixa no campo
data-sw-mask-valueAtributo criado no input com os números/letras sem pontuação (no dinheiro: os centavos, ex. "123456").input.dataset.swMaskValue
inputmode="numeric"Colocado sozinho nos formatos prontos (teclado numérico no celular), se você não tiver escrito outro.

Receitas prontas — usos reais

Situações que aparecem em quase todo site. Copie a que servir.

Cadastro de cliente Ao vivo
<form sw-frm action="/clientes" method="post">
  <div sw-frm-row>
    <div sw-fld>
      <label for="cpf">CPF</label>
      <input sw-inp id="cpf" name="cpf" sw-mask="cpf" placeholder="000.000.000-00">
    </div>
    <div sw-fld>
      <label for="nasc">Nascimento</label>
      <input sw-inp id="nasc" name="nasc" sw-mask="data" placeholder="dd/mm/aaaa">
    </div>
  </div>
  <div sw-frm-row>
    <div sw-fld>
      <label for="cel">Celular</label>
      <input sw-inp id="cel" name="cel" sw-mask="telefone" placeholder="(81) 99999-0000">
    </div>
    <div sw-fld>
      <label for="cep">CEP</label>
      <input sw-inp id="cep" name="cep" sw-mask="cep" placeholder="00000-000">
    </div>
  </div>
  <div sw-frm-act><button sw-btn="pri" type="submit">Salvar cliente</button></div>
</form>
Pegar só os números (para enviar ou buscar o CEP) Ao vivo

Digite o CEP completo.

<input sw-inp id="cep" sw-mask="cep" placeholder="00000-000">

<script>
  const cep = document.getElementById('cep');
  cep.addEventListener('sw:mask-input', (e) => {
    // e.detail.value = "50030-000" (na tela) · e.detail.raw = "50030000" (só números)
    if (e.detail.raw.length === 8) {
      fetch('https://viacep.com.br/ws/' + e.detail.raw + '/json/')
        .then((r) => r.json())
        .then((end) => console.log(end.logradouro));
    }
  });

  // em qualquer momento:
  SW.Mask.raw(cep);          // "50030000"
  cep.dataset.swMaskValue;   // "50030000"
</script>
Preencher um campo com máscara pelo código (dados salvos) Ao vivo
<input sw-inp id="preco" name="preco" sw-mask="dinheiro">

<script>
  // o banco guardou 159990 (centavos) → aparece "R$ 1.599,90"
  SW.Mask.set('#preco', '159990');
</script>
Registrar um formato novo com nome (usar em vários campos) Ao vivo
<!-- 1) registre o formato uma vez, ANTES do SWCore iniciar a página -->
<script src="https://swcore.sanweb.com.br/dist/2.1.0/swcore.min.js"></script>
<script>
  SWMask.addMask('processo', '#######-##.####.#.##.####');
</script>

<!-- 2) use o nome em qualquer campo -->
<input sw-inp sw-mask="processo" placeholder="0000000-00.0000.0.00.0000">

Eventos

sw:mask-input
No input, a cada tecla, depois de formatar. Traz e.detail.mask (o nome do formato), e.detail.value (como está na tela) e e.detail.raw (só números/letras).

API (JavaScript)

SW.Mask.raw('#id')
Devolve os números (ou letras) sem pontuação. Aceita o texto '#id' ou o próprio campo.
SW.Mask.set('#id', 'valor')
Escreve um valor no campo já formatado (ex.: vindo do banco de dados).
SW.Mask.apply(campo)
Formata de novo o que está no campo agora (útil depois de mudar o valor por código sem usar set).
SW.Mask.addMask('nome', 'desenho')
Registra um formato com nome, para usar como sw-mask="nome". Também existe como SWMask.addMask.

Precisa de quê

  • swcore.min.css e swcore.min.js.

Cuidados — erros comuns

  • A máscara funciona em <input>. Em <textarea> ela não faz nada.
  • Não use type="number" num campo com máscara: esse tipo não aceita ponto, traço nem parênteses. Deixe type="text" (ou type="tel" no telefone).
  • O formato registrado com addMask precisa existir antes do SWCore montar a página. Se registrar depois, chame SW.reinit() para os campos com o nome novo começarem a funcionar.
  • No dinheiro/valor, os números "limpos" são os centavos: "R$ 1.234,56" vira 123456. Divida por 100 no servidor.
  • O formato enviado ao servidor é o da tela (com pontos e traços). Se o seu banco guarda só números, limpe no servidor ou use data-sw-mask-value.
  • Não coloque sw-mask e sw-matinp-mask no mesmo campo.

O que ele não faz

  • Só formata: não diz se o CPF/CNPJ existe ou se a data é válida (31/02 passa). Para conferir, use Validação inline ou Validação de formulário.
  • Editar no meio do texto joga o cursor para o fim a cada tecla. Funciona bem para quem digita em sequência; para corrigir um número no meio, apague e digite de novo.
  • O * da máscara própria aceita só letras e números — símbolos digitados são descartados.