Trabalhando com Mascaras em Java Script - Final
Igor Escobar on Fev 20th 2008
Esta implementação eu criei para os programadores que utilizam alguma função que faz o auto-tab automático entre os campos.
-
/**
-
* Formata o Campo de acordo com a mascara informada.
-
* Ex de uso: onkeyup="AplicaMascara('HORA', this);".
-
* @author Igor Escobar (blog@igorescobar.com)
-
* @param Mascara String que possui o nome da mascara de formatação do campo.
-
* @param elemento Campo que será formatado de acordo com a mascara, voce pode informar o id direto ou o próprio elemento usando o this.
-
* @returns {void}
-
* @methods
-
- DATA:
-
- HORA:
-
- CEP:
-
- CPF:
-
- CNPJ
-
- TEL
-
- TELDDD
-
*/
-
function AplicaMascara(Mascara, elemento)
-
{
-
-
// Seta o elemento
-
var elemento = (elemento) ? elemento : document.getElementById(elemento);
-
if(!elemento) return false;
-
-
// DEFINE AS REGRAS DE FORMATAÇÃO DOS CAMPOS
-
var Regexs = {
-
DATA: /(([0-9]){2})(([0-9]){2})(([0-9]){4})/,
-
HORA: /(([0-9]{2}))(([0-9]){2})(([0-9]){2})/,
-
CEP: /(([0-9]{5}))(([0-9]){3})/,
-
CPF: /(([0-9]{3}))(([0-9]){3})(([0-9]){3})(([0-9]){2})/,
-
CNPJ: /(([0-9]{2}))(([0-9]){3})(([0-9]){3})(([0-9]){4})(([0-9]){2})/,
-
TEL: /(([0-9]){4})(([0-9]){4})/,
-
TELDDD: /(([0-9]){2})(([0-9]){4})(([0-9]){4})/
-
}
-
MyRegex = eval('Regexs.'+Mascara);
-
-
// INSTANCIA A REGRA REGEX PARA FORMATACAO
-
getRegexGroups = new RegExp(MyRegex);
-
-
// INSTANCIA A REGRA QUE VERIFICA SE O CAMPO POSSUI SOMENTE NÚMEROS
-
onlyNumbers = new RegExp(/^([0-9]+)$/);
-
-
// ESTE É O CAMPO COM AS IMPURESAS (DIGITADO PELO USUÁRIO FINAL)
-
var CampoSujo = elemento.value;
-
-
// RETIRA OS EXCESSOS DOS CAMPOS PARA QUE POSSAMOS APLICAR A MASCARA EM UM CAMPO LIMPO
-
var oValue = CampoSujo.replace(/([./;:,\-()]+)/g,"");
-
-
// VERIFICA SE A REGRA QUE ELE SE ESCOLHEU SE APLICA AO TEXTO DIGITADO NO CAMPO
-
if(getRegexGroups.test(oValue) == true){
-
//APLICA A REGRA NO CAMPO E FORMATA
-
switch(Mascara){
-
case 'DATA': oNewCampo = oValue.replace(getRegexGroups,"$1/$3/$5"); break;
-
case 'HORA': oNewCampo = oValue.replace(getRegexGroups,"$1:$3:$5"); break;
-
case 'CEP': oNewCampo = oValue.replace(getRegexGroups,"$1$3-$5"); break;
-
case 'CPF': oNewCampo = oValue.replace(getRegexGroups,"$1.$3.$5-$7"); break;
-
case 'CNPJ': oNewCampo = oValue.replace(getRegexGroups,"$1.$3.$5/$7-$9"); break;
-
case 'TEL': oNewCampo = oValue.replace(getRegexGroups,"$1-$3"); break;
-
case 'TELDDD': oNewCampo = oValue.replace(getRegexGroups,"($1)$3-$5"); break;
-
}
-
// Retorna o valor do elemento com seu novo valor
-
elemento.value = oNewCampo;
-
}
-
}
Observe que nos comentários do código possui as mascaras suportadas pela função. Se você precisar de alguma especifica, basta comentar este post detalhando a regra e eu retorno o comentário com a regra Regex para você agregar ao seu objeto.
Como Usar?
Exemplo:
-
<input name="data" onkeypress="AplicaMascara('DATA',this);" type="text" />
That's it!
A função AplicaMascara(); possui 2 parametros:
- Nome da mascara que você quer aplicar
- Objeto que será manipulado pela função JavaScript
É isso, essa implementação foi feita devido aos problemas apresentados pela implementação anterior que apresentou problemas em relação a precisão do auto-tab, fazendo com que o campo mudasse de foco antes do usuário terminar de digitar a data com a mascara por completo.
Espero ter contribuído!
[]'s
Leia também:
Mootools Extension: moo.rd on February 21st, 2008
.
Filed in Java Script, Utilidades | One response so far
Thalles Mai 11th 2008 at 12:47 am 1
Cara, eu encontrei um bug no seu script, na linha:
case ‘CEP’: oNewCampo = oValue.replace(getRegexGroups,”$1$3-$5″); break;
Eu corrigi para:
case ‘CEP’: oNewCampo = oValue.replace(getRegexGroups,”$1-$3″); break;
Valeu Cara, ótimo script.