Se você é programador, e ainda recusa ou ignora estudar este sub-mundo da programação, este post é para você!
Este post será para mostrar, CLARAMENTE, como as expressões regulares podem ajudar você a se tornar um desenvolvedor mais produtivo dentro da sua empresa.
Na empresa em que eu trabalho, tive que desenvolver uma função genérica onde ela é capaz de aplicar qualquer tipo de mascara em cima de uma string ( data, hora, cep, cpf, cnpj, telefone etc ).
1º Para que eu pudesse aplicar a mascara em cima de um campo com CPF por exemplo eu tinha que primeiro, retirar as impurezas que o usuário pudesse vir a digitar como acentos, vírgulas, pontos etc.
2º Eu tinha que retirar os zeros a esquerda e depois adicionar os zeros a esquerda corretamente pois o usuário poderia digitar os zeros em excesso e isso tinha que ser tratado ou ignorado pela formatação.
3º Finalmente, aplicamos a mascara.
Vou dar atenção a essa função para retirar os zeros a esquerda, a primeira solução que eu desenvolvi foi essa, funciona, porém, é meio grande:
-
function RetiraZerosEsquerda(Numero){
-
var Numero = ''+Numero;
-
-
var len = Numero.length;
-
var numPermitidos = '123456789';
-
var Numero2 = '';
-
var Cut = true;
-
for(var i = 0; i <= len; i++) {
-
nNow = Numero.charAt(i);
-
if(numPermitidos.indexOf(nNow) != -1) Cut = false;
-
if(nNow != 0) { Numero2 += nNow; }
-
else if(Cut == false) { Numero2 += nNow; }
-
}
-
return Numero2;
-
}
Agora, pensei em aplicar esta mesma solução utilizando expressões regulares, funciona perfeitamente, e veja como ficou:
-
function RetiraZerosEsquerda(Numero){
-
return Numero.replace(/(0)[^1-9]+/g,"");
-
}
Interessante não?
Fica ai mais um convite para você que ainda às ignora.
Facilitando o Estudo
Na internet existe várias ferramentas que te ajudam na fixação e treinamento dos conceitos aprendidos neste livro, uma destas, é o Regex Tester online, você escreve um texto simples, escreve a regra e o editor vai colorindo as áreas afetadas por sua expressão regular no seu texto.
Guia de Links Uteis
Expressões Regulares - Aplicando
- Expressões Regulares na Linguagem C, por Thobias Salazar Trevisan
- Expressões Regulares em C - Linux Gazette, traduzido por Fabio Utzig
- Documentação online sobre Expressões Regulares em Perl, por Iuri Gomes Diniz
- Expressões Regulares em Java - java.util.regex, por Paulo Silveira
- Expressões Regulares com Java, por Lucas de Castro
- PHP - Validação e exibição de CEPs, por Klaus Roberto de Paiva
- PHP - Utilizando regex para validação de compos de formulários, por Erika Focke
- Expressões Regulares em PHP #1
- Expressões Regulares em PHP #2, por Roberto Bertó
- Validação de Formulários HTML com Java Script, por Márcio d'Ávila
- JavaScript - Expressões Regulares, por Manoel M. Alves S. Jr
- Expressões Regulares em JavaScript, por Felipe
- Expressões Regulares no Ruby, por Lucas Húngaro
Nos links acima você encontra informações suficientes para em pouco tempo sair criando suas próprias expressões.
Ah!
Se você se intessou pela função da mascara, divirta-se:
-
//
-
-
/**
-
* 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,5}))/,
-
CNPJ: /(([0-9]{2}))(([0-9]){3})(([0-9]){3})(([0-9]){4})(([0-9]){2,6})/,
-
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
-
-
if(Mascara == "CPF" || Mascara == "CNPJ")
-
var oValue = RetiraZerosEsquerda(CampoSujo.replace(/([./;:,\-()]+)/g,""));
-
else
-
var oValue = CampoSujo.replace(/([./;:,\-()]+)/g,"");
-
-
-
if(Mascara == "CPF") { oValue = addLeftZeros(""+oValue, 11); }
-
if(Mascara == "CNPJ") { oValue = addLeftZeros(""+oValue, 14); }
-
-
-
// 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
-
if(parseInt(oValue) != 0 && parseInt(oValue) != "") elemento.value = oNewCampo;
-
-
}
-
}