Skip to content

Instantly share code, notes, and snippets.

@rrfaria
Created March 22, 2019 21:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rrfaria/2d372406418678752f1f27126cad0120 to your computer and use it in GitHub Desktop.
Save rrfaria/2d372406418678752f1f27126cad0120 to your computer and use it in GitHub Desktop.
Mascara para Moeda - Money mask - Currency mask - Need Refac - based on (https://gist.github.com/antoniopassos/203181)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Mask</title>
</head>
<body>
Entrar caracteres: <br><br>
<form>
Valor em R$: <input id="money-mask" type="text" name="valor" maxlength="15" placeholder="Digite aqui" >
</form>
<script>
function formataMoeda(el, SeparadorMilesimo, SeparadorDecimal, e) {
const objTextBox = el;
const maxLen = objTextBox.getAttribute('maxlength');
let len = objTextBox.value.length;
let key = '';
let i = 0;
const strCheck = '0123456789';
let aux = '';
const whichCode = (window.addEventListener) ? e.which : e.keyCode;
// 13=enter, 8=backspace as demais retornam 0(zero)
// whichCode==0 faz com que seja possivel usar todas as teclas como delete, setas, etc
if ((whichCode === 13) || (whichCode === 0) || (whichCode === 8)) {
return true;
}
key = String.fromCharCode(whichCode); // Valor para o código da Chave
if (strCheck.indexOf(key) === -1) {
return false;
} // Chave inválida
if (len >= maxLen) {
return false;
}
for (i = 0; i < len; i += 1) {
if ((objTextBox.value.charAt(i) !== '0') && (objTextBox.value.charAt(i) !== SeparadorDecimal)) {
break;
}
}
for (; i < len; i += 1) {
if (strCheck.indexOf(objTextBox.value.charAt(i)) !== -1) {
aux += objTextBox.value.charAt(i);
}
}
aux += key;
len = aux.length;
if (len === 0) {
objTextBox.value = '';
}
if (len === 1) {
objTextBox.value = `0${SeparadorDecimal}0${aux}`;
}
if (len === 2) {
objTextBox.value = `0${SeparadorDecimal}${aux}`;
}
if (len > 2) {
let aux2 = '';
let len2 = 0;
let j = 0;
for (j = 0, i = len - 3; i >= 0; i -= 1) {
if (j === 3) {
aux2 += SeparadorMilesimo;
j = 0;
}
aux2 += aux.charAt(i);
j += 1;
}
objTextBox.value = '';
len2 = aux2.length;
for (i = len2 - 1; i >= 0; i -= 1) {
objTextBox.value += aux2.charAt(i);
}
objTextBox.value += SeparadorDecimal + aux.substr(len - 2, len);
}
return false;
}
const elem = document.getElementById('money-mask');
elem.onkeypress = e => formataMoeda(e.target, '.', ',', e);
</script>
</body>
</html>
@rrfaria
Copy link
Author

rrfaria commented Mar 22, 2019

Precisa fazer um refac no código para aplicar o clean code.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment