deus-abencoe
Version:
Um pacote com utilitários para facilitar o desenvolvimento front-end de projetos brasileiros
235 lines (194 loc) • 8.41 kB
JavaScript
export function mascaraCPF(cpf) {
cpf.addEventListener('input', () => {
// Remove tudo o que não é dígito
let cpfFormatado = cpf.value.replace(/\D/g, "").slice(0, 11);
// Adiciona os pontos e o traço conforme necessário
if (cpfFormatado.length <= 11) {
cpfFormatado = cpfFormatado.replace(/(\d{3})(\d)/, "$1.$2");
cpfFormatado = cpfFormatado.replace(/(\d{3})(\d)/, "$1.$2");
cpfFormatado = cpfFormatado.replace(/(\d{3})(\d{1,2})$/, "$1-$2");
}
cpf.value = cpfFormatado;
})
}
export function mascaraCNPJ(cnpj) {
cnpj.addEventListener('input', () => {
//Remove tudo que não é dígito
let cnpjFormatado = cnpj.value.replace(/\D/g, "").slice(0, 14);
// Adiciona os pontos, a barra e o traço conforme necessário
if (cnpjFormatado.length <= 14) {
cnpjFormatado = cnpjFormatado.replace(/^(\d{2})(\d)/, "$1.$2");
cnpjFormatado = cnpjFormatado.replace(/^(\d{2})\.(\d{3})(\d)/, "$1.$2.$3");
cnpjFormatado = cnpjFormatado.replace(/\.(\d{3})(\d)/, ".$1/$2");
cnpjFormatado = cnpjFormatado.replace(/(\d{4})(\d)/, "$1-$2");
}
cnpj.value = cnpjFormatado;
})
}
export function mascaraMoeda(valor) {
valor.addEventListener('input', () => {
// Remove tudo o que não é dígito ou vírgula
let valorFormatado = valor.value.replace(/[^\d,]/g, "");
// Substitui vírgulas adicionais
const pedaco = valorFormatado.split(',');
if (pedaco.length > 2) {
valorFormatado = pedaco[0] + ',' + pedaco.slice(1).join('');
}
// Formata o valor antes da vírgula
let parteInteira = pedaco[0].replace(/\B(?=(\d{3})+(?!\d))/g, ".");
// Reúne a parte inteira e a parte decimal (se existir)
if (pedaco.length === 2) {
valor.value = parteInteira + ',' + pedaco[1];
} else {
valor.value = parteInteira;
}
})
}
export function mascaraIPv4(input) {
input.addEventListener('input', function (e) {
let value = input.value;
// Deixa apenas dígitos e ponto
value = value.replace(/[^0-9]/g, '');
let octets = [];
value.length < 4 ? (octets[0] = parseInt(value.substring(0, 3)) > 255 ? 255 : parseInt(value.substring(0, 3))) : octets[0] = value.substring(0, 3);
value.length < 7 ? (octets[1] = parseInt(value.substring(3, 6)) > 255 ? 255 : parseInt(value.substring(3, 6))) : octets[1] = value.substring(3, 6);
value.length < 10 ? (octets[2] = parseInt(value.substring(6, 9)) > 255 ? 255 : parseInt(value.substring(6, 9))) : octets[2] = value.substring(6, 9);
value.length < 13 ? (octets[3] = parseInt(value.substring(9, 12)) > 255 ? 255 : parseInt(value.substring(9, 12))) : octets[3] = value.substring(9, 12);
octets = octets.filter(octet => !isNaN(octet));
// junta os octetos
octets = octets.join('.');
input.value = octets;
});
}
export function mascaraIPv6(ip) {
ip.addEventListener('input', function (e) {
// Remove tudo o que não é dígito, letra (a-f, A-F), ou dois pontos
let ipv6 = ip.value.replace(/[^0-9a-fA-F]/g, "");
let partes = ipv6.split('').map((character, index) => index < 32 ? (index % 4 === 0 ? ipv6.substring(index, index + 4) : '') : '')
.filter(character => character !== "");
console.log(partes);
// Divida o valor em partes usando os dois pontos
//let partes = ipv6.split(':');
// Limite cada parte a 4 caracteres
for (let i = 0; i < partes.length; i++) {
if (partes[i].length > 4) {
partes[i] = partes[i].slice(0, 4);
}
}
// Reúne as partes com dois pontos
ip.value = partes.join(':');
});
}
export function teclaEHexOuDoisPontos(evt) {
const charCode = (evt.which) ? evt.which : evt.keyCode;
// Permite números (0-9), letras (a-f, A-F) e dois pontos (58)
if ((charCode >= 48 && charCode <= 57) || // 0-9
(charCode >= 65 && charCode <= 70) || // A-F
(charCode >= 97 && charCode <= 102) || // a-f
charCode === 58) { // :
return true;
}
return false;
}
export function teclaNumeroOuPonto(evt) {
const charCode = (evt.which) ? evt.which : evt.keyCode;
// Permite números (0-9) e ponto (46)
if (charCode !== 46 && (charCode < 48 || charCode > 57)) {
return false;
}
return true;
}
export function teclaNumeroOuVirgula(evt) {
const charCode = (evt.which) ? evt.which : evt.keyCode;
// Permite números (0-9), vírgula (44), backspace (8) e delete (46)
if (charCode !== 44 && (charCode > 31 && (charCode < 48 || charCode > 57))) {
return false;
}
return true;
}
export function teclaNumero(evt) {
const charCode = (evt.which) ? evt.which : evt.keyCode;
// Permite apenas números (0-9), tecla de backspace (8) e delete (46)
if (charCode > 31 && (charCode < 48 || charCode > 57)) {
return false;
}
return true;
}
export function mascaraCEP(input) {
input.addEventListener('input', function (e) {
let value = input.value;
// Remove todos os caracteres que não são dígitos
value = value.replace(/\D/g, '');
// Formata o valor como um CEP (99999-999)
if (value.length > 5) {
value = value.substring(0, 5) + '-' + value.substring(5, 8);
} else {
value = value.substring(0, 5);
}
// Atualiza o valor do input
input.value = value;
});
}
document.addEventListener('DOMContentLoaded', function () {
const camposMonetarios = document.querySelectorAll('.valor-monetario');
camposMonetarios.forEach(campo => {
campo.addEventListener('input', function () {
formatarMoeda(this);
});
});
});
export function formatarMoeda(element) {
let valor = element.value;
// Remove todos os caracteres não numéricos
valor = valor.replace(/\D/g, '');
// Converte o valor para um número inteiro
valor = parseInt(valor);
// Verifica se o valor é um número
if (isNaN(valor)) {
element.value = '';
return;
}
// Converte o valor para uma string e adiciona os separadores de milhar e o símbolo de reais
valor = (valor / 100).toLocaleString('pt-BR', { style: 'currency', currency: 'BRL' });
// Atualiza o valor do campo de entrada
element.value = valor;
}
// Adiciona o evento de input aos elementos com a classe especificada
window.onload = function () {
var elements = document.querySelectorAll('.apenasNumeros');
elements.forEach(function (element) {
apenasNumeros(element);
});
}
// Função para remover todos os caracteres que não são números
function apenasNumeros(input) {
return input.replace(/\D/g, '');
}
// Função para copiar valor de um input para outro removendo caracteres não numéricos
function copyAndCleanInput(sourceElement, targetElement) {
sourceElement.addEventListener('input', function () {
let valor = sourceElement.value;
let cleanedValue = apenasNumeros(valor);
targetElement.value = cleanedValue;
});
}
// Adiciona o evento de input aos elementos de origem e destino
window.onload = function () {
var sourceElement = document.querySelector('.sourceInput');
var targetElement = document.querySelector('.targetInput');
if (sourceElement && targetElement) {
copyAndCleanInput(sourceElement, targetElement);
} else {
console.error("Um ou ambos os elementos não foram encontrados.");
}
}
// Adiciona o evento de input aos elementos de origem e destino
window.onload = function () {
var sourceElement = document.querySelector('.sourceInputCNPJ');
var targetElement = document.querySelector('.targetInputCNPJ');
if (sourceElement && targetElement) {
copyAndCleanInput(sourceElement, targetElement);
} else {
console.error("Um ou ambos os elementos não foram encontrados.");
}
}