Coleção de métodos para o plugin validate do jQuery.

Na verdade não é bem uma coleção com dezenas de métodos, a intenção do post é simplesmente mostrar que é possível e fácil criar métodos para o plugin.

Para quem não sabe o que é o validate, recomendo saber do que se trata, você pode ganhar muito tempo no desenvolvimento utilizando o plugin, principalmente para desenvolver interface de back end, com diversas validações. Tem um post do Alexandre Magno antigo, porém muito bom, explicando o que é o plugin, o que faz, como utilizá-lo e um exemplo bem simples de um formulário validado pelo plugin.

Quando se faz o download do validate, ele vêm com uma coleção de médotos, mas alguns que nós precisamos, como verificação de data ( formato dd/mm/aaaa ) e verificação de cpf, não tem.

Alguns métodos que serão postados aqui não fui eu quem fez, queria dar os créditos a quem fez, porém não sei quem foi. Mas… vamos ao ponto, veja como é facil adicionar novos métodos.

Verificação de CPF

O código abaixo adiciona um Método que chamamos de “verificaCPF” :

jQuery.validator.addMethod("verificaCPF", function(value, element) {
	value = value.replace('.','');
	value = value.replace('.','');
	cpf = value.replace('-','');
	while(cpf.length < 11) cpf = "0"+ cpf;
	var expReg = /^0+$|^1+$|^2+$|^3+$|^4+$|^5+$|^6+$|^7+$|^8+$|^9+$/;
	var a = &#91;&#93;;
	var b = new Number;
	var c = 11;
	for (i=0; i<11; i++){
		a&#91;i&#93; = cpf.charAt(i);
		if (i < 9) b += (a&#91;i&#93; * --c);
	}
	if ((x = b % 11) < 2) { a&#91;9&#93; = 0 } else { a&#91;9&#93; = 11-x }
	b = 0;
	c = 11;
	for (y=0; y<10; y++) b += (a&#91;y&#93; * c--);
	if ((x = b % 11) < 2) { a&#91;10&#93; = 0; } else { a&#91;10&#93; = 11-x; }
	if ((cpf.charAt(9) != a&#91;9&#93;) || (cpf.charAt(10) != a&#91;10&#93;) || cpf.match(expReg)) return false;
	return true;
}, "Informe um CPF válido."); // Mensagem padrão 
&#91;/sourcecode&#93;

E agora na hora de validar seu formulário, você já pode utilizar o método adicionado:

&#91;sourcecode language="javascript"&#93;
$("form#cadastro").validate({
	rules: {
		'CampoCPF': { 
			required: true,
			verificaCPF: true 
		}				
	},
	messages: {
		CampoCPF: { 
			required: "Digite seu cpf"
			verificaCPF: "CPF inválido"
		}				
	},
});	
&#91;/sourcecode&#93;

<h4> Verificação de Data (formato dd/mm/aaaa) </h4>

Agora o método se chama dateBR e a mensagem padrão (caso não seja colocada outra na hora de usar o validate, será "Informe uma data válida".


jQuery.validator.addMethod("dateBR", function(value, element) {            
	 //contando chars 
	if(value.length!=10) return false;
	// verificando data
	var data 		= value;
	var dia 		= data.substr(0,2);
	var barra1		= data.substr(2,1);
	var mes 		= data.substr(3,2);			
	var barra2		= data.substr(5,1);
	var ano 		= data.substr(6,4);			
	if(data.length!=10||barra1!="/"||barra2!="/"||isNaN(dia)||isNaN(mes)||isNaN(ano)||dia>31||mes>12)return false; 
	if((mes==4||mes==6||mes==9||mes==11)&amp;&amp;dia==31)return false;
	if(mes==2 &amp;&amp; (dia>29||(dia==29&amp;&amp;ano%4!=0)))return false;
	if(ano < 1900)return false;
	return true;		
}, "Informe uma data válida");  // Mensagem padrão 
&#91;/sourcecode&#93;

<h4> Verificação de Data e Hora (formato dd/mm/aaaa hh:mm) </h4>


jQuery.validator.addMethod("dateTimeBR", function(value, element) {            
	 //contando chars 
	if(value.length!=16) return false;
	 // dividindo data e hora
	if(value.substr(10,1)!=' ') return false; // verificando se há espaço				 
	var arrOpcoes = value.split(' ');
	if(arrOpcoes.length!=2) return false; // verificando a divisão de data e hora
	// verificando data
	var data 		= arrOpcoes[0];
	var dia 		= data.substr(0,2);
	var barra1		= data.substr(2,1);
	var mes 		= data.substr(3,2);			
	var barra2		= data.substr(5,1);
	var ano 		= data.substr(6,4);			
	if(data.length!=10||barra1!="/"||barra2!="/"||isNaN(dia)||isNaN(mes)||isNaN(ano)||dia>31||mes>12)return false; 
	if ((mes==4||mes==6||mes==9||mes==11)&amp;&amp;dia==31)return false;
	if (mes==2 &amp;&amp; (dia>29||(dia==29&amp;&amp;ano%4!=0)))return false;
	// verificando hora
	var horario 	= arrOpcoes[1];	
	var	hora 		= horario.substr(0,2);
	var doispontos 	= horario.substr(2,1);
	var minuto 		= horario.substr(3,2);			
	if(horario.length!=5||isNaN(hora)||isNaN(minuto)||hora>23||minuto>59||doispontos!=":")return false;
	return true;		
}, "Informe uma data e uma hora válida");	

Se alguém tiver (ou fizer) o método de CNPJ (ou algum outro legal que não tem aqui) me manda por e-mail ou posta aqui nos comentários.

[]s