Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia.
Estou precisando formatar um campo de entrada type text somente para numero com a seguinte formatação.
se menor que 999 mostrar dessa forma mesmo, nesse caso seria para centena.dezena.unidade. Tipo 001 até 009 depois 010 até 099 depois 100 até 999
de 1.000 até 999.999 mostrar com o ponto, nesse caso seria para milhar.centena.dezena.unidade. Tipo 001.000 até 001.999 e assim por diante.
de 1.000.000 até 9.999.000, nesse caso seria para milhão.milhar.centena.dezena.unidade. aqui mesma ideia....
Parecidos com aqueles campos de preço, que ao digitar os zeros ficam a esquerda até o valor atingirem a unidade correspondente.
Tentei adaptar esse que encontrei na net.
function moeda(a, e, r, t) {
let n = ""
, h = j = 0
, u = tamanho2 = 0
, l = ajd2 = ""
, o = window.Event ? t.which : t.keyCode;
if (13 == o || 8 == o)
return !0;
if (n = String.fromCharCode(o),
-1 == "0123456789".indexOf(n))
return !1;
for (u = a.value.length,
h = 0; h < u && ("0" == a.value.charAt(h) || a.value.charAt(h) == r); h++)
;
for (l = ""; h < u; h++)
-1 != "0123456789".indexOf(a.value.charAt(h)) && (l += a.value.charAt(h));
if (l += n,
0 == (u = l.length) && (a.value = ""),
1 == u && (a.value = "0" + r + "0" + l),
2 == u && (a.value = "0" + r + l),
u > 2) {
for (ajd2 = "",
j = 0,
h = u - 3; h >= 0; h--)
3 == j && (ajd2 += e,
j = 0),
ajd2 += l.charAt(h),
j++;
for (a.value = "",
tamanho2 = ajd2.length,
h = tamanho2 - 1; h >= 0; h--)
a.value += ajd2.charAt(h);
a.value += r + l.substr(u - 2, u)
}
return !1
}
Mas sem sucesso.
Grato por enquanto.Olá não sei se já resolveu mas tente algo assim
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<title>Formato de Número</title>
<style>
.formatted-input {
width: 200px;
padding: 10px;
font-size: 16px;
}
</style>
</head>
<body>
<input type="text" id="numberField" class="formatted-input" placeholder="Digite um número" oninput="formatNumber(this)" />
<script>
function formatNumber(input) {
// Remove caracteres não numéricos
let value = input.value.replace(/\D/g, '');
// Adiciona zero à esquerda para valores menores que 1000
if (value.length <= 3) {
input.value = value.padStart(3, '0');
} else if (value.length <= 6) {
// Formata para milhar
input.value = value.replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1.');
} else if (value.length <= 7) {
// Formata para milhão
input.value = value.replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1.')
.replace(/(\d{1,3})\.(\d{3})$/, '$1.$2')
.replace(/^(\d{1,3})\.(\d{3})\.(\d{3})$/, '$1.$2.$3');
} else {
// Remove os caracteres extras para limitar a 7 dígitos
input.value = value.slice(0, 7)
.replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1.')
.replace(/(\d{1,3})\.(\d{3})$/, '$1.$2')
.replace(/^(\d{1,3})\.(\d{3})\.(\d{3})$/, '$1.$2.$3');
}
}
</script>
</body>
</html>
Olá!
Tente assim: