Formatar moeda no onblur – javascript sem jQuery
Diferente das demais máscaras de moeda em javascript, assim como essa minha que formata usando Expressão Regular no onkeyUp do campo, a máscara que apresento agora, formata no evento onblur.
Aceita as entradas:
,1 = 0,10<br />
,10 = 0,10<br />
1 = 1,00<br />
10 = 10,00<br />
100 = 100,00
money-blur.js
'use strict';
function _signalFirst(v) {
return /^(,|\.)/.test(v);
}
function _signalOne(v) {
return /,|\.+\d$/.test(v);
}
function _onlyNumber(v) {
return /^\d+$/.test(v);
}
function _rightPosition(v) {
return /(,|\.)\d{2}$/.test(v);
}
function _format(v) {
var length = v.length;
if (_signalFirst(v)) {
console.log('_signalFirst');
v = v.replace(/[,.]/, '');
if (length===2) v = '0,' + v + '0';
else v = '0,' + v;
} else if (_onlyNumber(v)) {
console.log('_onlyNumber');
v = v + ',00';
} else if (_rightPosition(v)) {
console.log('_rightPosition');
v = v.replace(/[,.]/, '');
v = v.replace(/(\d)(\d{2})$/, '$1,$2');
} else if (_signalOne(v)) {
console.log('_signalOne');
v = v.replace(/[,.]/, '');
v = v + '0';
v = v.replace(/(\d)(\d{2})$/,"$1,$2");
} else {
v = v.replace(/[,.]/, '');
v = v.replace(/(\d{1,3})$/g,"$1,00");
v = v.replace(/(\d{1,3})(\d{3},00)$/,"$1.$2");
}
return v;
}
if (typeof exports !== 'undefined') {
if (typeof module !== 'undefined' && module.exports) {
exports = module.exports = _format;
}
exports._format = _format;
}
usando no teu html..
<script type="text/javascript"> type="text/javascript">
function id(el){
return document.getElementById(el);
}
window.onload = function(){
id('moeda').onkeyup = function() {
var v = this.value;
v = v.replace(/[^\d,.]/, '');
this.value = v;
};
id('moeda').onblur = function() {
var v = this.value;
this.value = _format(v);
}
};
</script>
<input type="text" name="moeda" id="moeda" />
É isso galera. Comente caso usem =)