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$") ouvalor(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
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
Escreva
sw-maskcom 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.
<input sw-inp sw-mask="cpf" placeholder="000.000.000-00" aria-label="CPF">
<input sw-inp sw-mask="cnpj" placeholder="00.000.000/0000-00" aria-label="CNPJ">
<input sw-inp sw-mask="document" placeholder="CPF ou CNPJ" aria-label="CPF ou CNPJ">
<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.
<input sw-inp sw-mask="telefone" placeholder="(81) 99999-0000" aria-label="Telefone">
<input sw-inp sw-mask="data" placeholder="dd/mm/aaaa" aria-label="Data">
<input sw-inp sw-mask="hora" placeholder="00:00" aria-label="Hora">
<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.
<input sw-inp sw-mask="dinheiro" placeholder="R$ 0,00" aria-label="Preço">
<input sw-inp sw-mask="valor" placeholder="0,00" aria-label="Valor">
<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.
<input sw-inp sw-mask="custom" sw-mask-mask="AAA-#*##" placeholder="ABC-1D23" aria-label="Placa">
<input sw-inp sw-mask="custom" sw-mask-mask="##.###.###-#" placeholder="12.345.678-9" aria-label="RG">
<input sw-inp sw-mask="custom" sw-mask-mask="AA-####" placeholder="CM-0042" aria-label="Código">
<input sw-inp sw-mask="custom" sw-mask-mask="****-****" placeholder="AB12-CD34" aria-label="Cupom">
Tabela de opções
| Palavra | O que faz | Exemplo |
|---|---|---|
| Formatos prontos (valor de sw-mask) | ||
cpf | 000.000.000-00 (11 números). | sw-mask="cpf" |
cnpj | 00.000.000/0000-00 (14 números). | sw-mask="cnpj" |
document | CPF 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" |
cep | 00000-000 (8 números). | sw-mask="cep" |
data | 00/00/0000 (8 números). Também aceita o nome date. | sw-mask="data" |
hora | 00:00 (4 números). | sw-mask="hora" |
cartao | 0000 0000 0000 0000 (16 números). | sw-mask="cartao" |
dinheiro | R$ 1.234,56 — os dois últimos números são os centavos. Até 15 números. | sw-mask="dinheiro" |
valor | Igual ao dinheiro, sem o "R$". | sw-mask="valor" |
| Máscara própria | ||
custom | Usa 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). | |
A | No 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-value | Atributo 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.
<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>
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>
<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>
<!-- 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-inpute.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')'#id' ou o próprio campo.SW.Mask.set('#id', 'valor')SW.Mask.apply(campo)set).SW.Mask.addMask('nome', 'desenho')sw-mask="nome". Também existe como SWMask.addMask.Precisa de quê
swcore.min.csseswcore.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. Deixetype="text"(outype="tel"no telefone). - O formato registrado com
addMaskprecisa existir antes do SWCore montar a página. Se registrar depois, chameSW.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" vira123456. 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-maskesw-matinp-maskno 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.

