function format(field, type, keypress) { this.perm = new Array(); this._event = keypress.which ? keypress.which: keypress.keyCode; /* ########################################################################### Detecta se o browser é Firefox para prevenir que teclas como Delete, Esc e Backspace sejam canceladas ao finalizar o evento "onkeypress" ########################################################################### */ this.detectBrowser = function() { this.perm = new Array( 27, /* Esc */ 35, /* End/Home */ 36, 94, 46, /* Del/Backspace */ 41, 37, 38, 39, 40 /* Direções */ ); if (!keypress.preventDefault) { return true; } else { reg = new RegExp(" "+this._event+" "); if ((this._event >=0 && this._event <=30) || reg.test(this.perm.join(" "))) { return false; } else { return true; } } } /* ########################################################################### Formatação de CPF ########################################################################### */ this.f_cpf = function (field) { var pattern = /([0-9\.\-])/ var maxsize = 14 str = String.fromCharCode(this._event) if (maxsize != null && !isNaN(maxsize) && this.detectBrowser()) { if (field.value.length >= maxsize){ keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false; } } if (this.detectBrowser()) { if (pattern.test(str)) { if (field.value.length == 3 ) { field.value = field.value; field.value = field.value + '.'; } if (field.value.length == 7 ) { field.value = field.value; field.value = field.value + '.'; } if (field.value.length == 11 ) { field.value = field.value; field.value = field.value + '-'; } } else { keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false; } } } /* ########################################################################### Formatação de CNPJ ########################################################################### */ this.f_cnpj = function (field) { var pattern = /([0-9\.\-])/ var maxsize = 18 str = String.fromCharCode(this._event) if (maxsize != null && !isNaN(maxsize) && this.detectBrowser()) { if (field.value.length >= maxsize){ keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false; } } if (this.detectBrowser()) { if (pattern.test(str)) { if (field.value.length == 2 ) { field.value = field.value; field.value = field.value + '.'; } if (field.value.length == 6 ) { field.value = field.value; field.value = field.value + '.'; } if (field.value.length == 10 ) { field.value = field.value; field.value = field.value + '/'; } if (field.value.length == 15 ) { field.value = field.value; field.value = field.value + '-'; } } else { keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false; } } } /* ########################################################################### Formatação de números ########################################################################### */ this.f_number = function (field) { var pattern = /([0-9])/ var maxsize = null str = String.fromCharCode(this._event) if (maxsize != null && !isNaN(maxsize) && this.detectBrowser()) { if (field.value.length >= maxsize){ keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false; } } if (this.detectBrowser()) { if (pattern.test(str)) { //nenhuma formatação } else { keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false; } } } /* ########################################################################### Formatação de CEP ########################################################################### */ this.f_cep = function (field) { var pattern = /([0-9\-])/ var maxsize = 9 str = String.fromCharCode(this._event) if (maxsize != null && !isNaN(maxsize) && this.detectBrowser()) { if (field.value.length >= maxsize){ keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false; } } if (this.detectBrowser()) { if (pattern.test(str)) { if (field.value.length == 5 ) {     field.value = field.value;     field.value = field.value + '-'; } } else { keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false; } } } /* ########################################################################### Formatação de telefone ########################################################################### */ this.f_fone = function (field) { var pattern = /([0-9])/ var maxsize = 14 str = String.fromCharCode(this._event) if (maxsize != null && !isNaN(maxsize) && this.detectBrowser()) { if (field.value.length >= maxsize){ keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false; } } if (this.detectBrowser()) { if (pattern.test(str)) { tecla = this._event vr = field.value; vr = vr.replace( "(", "" ); vr = vr.replace( ")", "" ); vr = vr.replace( " ", "" ); vr = vr.replace( "-", "" ); tam = vr.length; if (tam < maxsize && tecla != 8) { tam = vr.length + 1 ; } if ( tecla == 8 || tecla >= 48 && tecla <= 57 || tecla >= 96 && tecla <= 105 ) { if ( tam <= 4 ) { field.value = vr ; } if ( (tam > 4) && (tam <= 8) ) { field.value = vr.substr(0,tam-4) + '-' + vr.substr( tam - 4, tam ) ; } if ( (tam >= 9) && (tam <= 10) ) { field.value = '(' + vr.substr(0,2) + ') ' + vr.substr(2,tam-6) + '-' + vr.substr(tam-4,tam) ; } } } else { keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false; } } } /* ########################################################################### Formatação de datas ########################################################################### */ this.f_data = function (field) { var pattern = /([0-9\/])/ var maxsize = 10 str = String.fromCharCode(this._event) if (maxsize != null && !isNaN(maxsize) && this.detectBrowser()) { if (field.value.length >= maxsize){ keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false; } } if (this.detectBrowser()) { if (pattern.test(str)) { if (field.value.length == 2 && this._event != 47) { field.value = field.value; field.value = field.value + '/'; } if (field.value.length == 5 && this._event != 47 ) { field.value = field.value; field.value = field.value + '/'; } } else { keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false; } } } /* ########################################################################### Formatação de datas (USA) ########################################################################### */ this.f_date_us = function (field) { var pattern = /([0-9\/])/ var maxsize = 10 str = String.fromCharCode(this._event) if (maxsize != null && !isNaN(maxsize) && this.detectBrowser()) { if (field.value.length >= maxsize){ keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false; } } if (this.detectBrowser()) { if (pattern.test(str)) { if (field.value.length == 4 && this._event != 47) { field.value = field.value; field.value = field.value + '-'; } if (field.value.length == 7 && this._event != 47 ) { field.value = field.value; field.value = field.value + '-'; } } else { keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false; } } } /* ########################################################################### Formatação de hora ########################################################################### */ this.f_hora = function (field) { var pattern = /([0-9])/ var maxsize = 8 str = String.fromCharCode(this._event) if (maxsize != null && !isNaN(maxsize) && this.detectBrowser()) { if (field.value.length >= maxsize){ keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false; } } if (this.detectBrowser()) { if (pattern.test(str)) { if (field.value.length == 2 && this._event != 47) { field.value = field.value; field.value = field.value + ':'; } if (field.value.length == 5 && this._event != 47 ) { field.value = field.value; field.value = field.value + ':'; } } else { keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false; } } } /* ########################################################################### Formatação de valores monetários ########################################################################### */ this.f_valor_monetario = function (field) { var pattern = /([0-9])/ var maxsize = 18 str = String.fromCharCode(this._event) if (maxsize != null && !isNaN(maxsize) && this.detectBrowser()) { if (field.value.length >= maxsize){ keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false; } } if (this.detectBrowser()) { if (pattern.test(str)) { tecla = this._event vr = field.value vr = vr.replace("/", "");  vr = vr.replace("/", "");  vr = vr.replace(",", "");  vr = vr.replace(".", "");  vr = vr.replace(".", "");  vr = vr.replace(".", "");  vr = vr.replace(".", "");  tam = vr.length;    if (tam < maxsize && tecla != 8)   tam = vr.length + 1;     if (tecla == 8)   tam = tam - 1;      if (tecla == 8 || tecla >=48 && tecla <= 57 || tecla >=96 && tecla <=105)  {   if (tam <= 2)    field.value = vr;       if ((tam > 2) && (tam <= 5))    field.value = vr.substr(0, tam - 2) + ',' + vr.substr(tam - 2, tam);        if ((tam >= 6) && (tam <= 8))    field.value = vr.substr(0, tam - 5) + '.' + vr.substr(tam - 5, 3) + ',' + vr.substr(tam - 2, tam);        if ((tam >= 9) && (tam <= 11))    field.value = vr.substr(0, tam - 8) + '.' + vr.substr(tam - 8, 3) + '.' + vr.substr(tam - 5, 3) + ',' + vr.substr(tam - 2, tam);       if ((tam >= 12) && (tam <= 14))    field.value = vr.substr(0, tam - 11) + '.' + vr.substr(tam - 11, 3) + '.' + vr.substr(tam - 8, 3) + '.' + vr.substr(tam - 5, 3) + ',' + vr.substr(tam - 2, tam);        if ((tam >= 15) && (tam <= 17))    field.value = vr.substr(0, tam - 14) + '.' + vr.substr(tam - 14, 3) + '.' + vr.substr(tam - 11, 3) + '.' + vr.substr(tam - 8, 3) + '.' + vr.substr(tam - 5, 3) + ',' + vr.substr(tam - 2, tam);   }   } else { keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false; } } } /* ########################################################################### Formatação de valores porcntagem ########################################################################### */ this.f_porcentagem = function (field) { var pattern = /([0-9])/ var maxsize = 6 str = String.fromCharCode(this._event) if (maxsize != null && !isNaN(maxsize) && this.detectBrowser()) { if (field.value.length >= maxsize){ keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false; } } if (this.detectBrowser()) { if (pattern.test(str)) { tecla = this._event vr = field.value vr = vr.replace("/", "");  vr = vr.replace("/", "");  vr = vr.replace(",", "");  vr = vr.replace(".", "");  vr = vr.replace(".", "");  vr = vr.replace(".", "");  vr = vr.replace(".", "");  tam = vr.length;    if (tam < maxsize && tecla != 8)   tam = vr.length + 1;     if (tecla == 8)   tam = tam - 1;      if (tecla == 8 || tecla >=48 && tecla <= 57 || tecla >=96 && tecla <=105)  {   if (tam < 2)    field.value = vr;       if ((tam > 2) && (tam <= 4))    field.value = vr.substr(0, tam - 2) + ',' + vr.substr(tam - 2, tam);  if (tam == 5)    field.value = vr.substr(0, tam - 2) + ',' + vr.substr(tam - 2, tam);   }   } else { keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false; } } } switch (type) { case "cpf": this.f_cpf(field); break; case "cnpj": this.f_cnpj(field); break; case "number": case "numero": this.f_number(field); break; case "cep": this.f_cep(field); break; case "fone": case "telefone": case "tel": this.f_fone(field); break; case "data": case "date": this.f_data(field); break; case "data_us": case "date_us": this.f_date_us(field) break; case "hour": case "hora": case "time": this.f_hora(field); break; case "porcentagem": this.f_porcentagem(field); break; case "valor": case "dinheiro": case "moeda": this.f_valor_monetario(field); break; default: alert("Formatação de tipo '" + type +"' não existe!"); break; } }