Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Thiago_si

[Resolvido] Validator CPF

Recommended Posts

Bom dia pessoal!

To com esse script aqui do Validator, para validar alguns campos de um formulario, mais uma função de validar CPF.

Como o campo CPF tem várias restrições para validação, fez-se necessário usar o addMethod do Validator.

Só que nao to conseguindo fazer com que as mensagens apareçam na hora da validação.

Eu to achando que eu nao "linkei" corretamente o a função ao campo.

 

O código é esse:

<script language="JavaScript" type="text/javascript">
      //SOMENTE PARA CPF
   function isCpf(cpf){
		exp = /\.|-/g;
		cpf = cpf.toString().replace(exp, "");
		var digitoDigitado = eval(cpf.charAt(9)+cpf.charAt(10));
		var soma1=0, soma2=0;
		var vlr =11;
		for(i=0;i<9;i++){
			soma1+=eval(cpf.charAt(i)*(vlr-1));
			soma2+=eval(cpf.charAt(i)*vlr);
			vlr--;
		}  
		soma1 = (((soma1*10)%11)==10 ? 0:((soma1*10)%11));
		soma2 = (((soma2+(2*soma1))*10)%11);

		if(cpf == "11111111111" || cpf == "22222222222" || cpf ==
							"33333333333" || cpf == "44444444444" || cpf == "55555555555" || cpf ==
							"66666666666" || cpf == "77777777777" || cpf == "88888888888" || cpf ==
							"99999999999" || cpf == "00000000000" ){
					var digitoGerado = null;
		}else{
			var digitoGerado = (soma1*10) + soma2;
		}

		if(digitoGerado != digitoDigitado){
		   return false;
		}
		return true;
	}

	function isCpfFormatted(cpf) {
			var validCPF = /^\d{3}\.\d{3}\.\d{3}\-\d{2}$/;
			return cpf.match(validCPF);
	}

	(function($) {
       $.validator.addMethod("cpf", function(value, element, type) {
               if (value == "")
                       return true;

               if ((type == 'format' || type == 'both') && !isCpfFormatted(value))
                       return false;
               else
                       return ((type == 'valid' || type == 'both')) ? isCpf(value) : true;

       }, function(type,element) {
               return (type == 'format' || (type == 'both' && !isCpfFormatted($(element).val()))) ?
                               'Formato do CPF não é válido' : 'Por favor digite um CPF válido';
       });
	})(jQuery);

	//VALIDA TODOS OS CAMPOS DO FORMULARIO
	$(document).ready( function() {
	$("#formCadastro").validate({
	// Define as regras
	rules:{
	nomeCadastro:{	required: true, minlength: 3},
	emailCadastro:{
	// campoEmail será obrigatório (required) e precisará ser um e-mail válido (email)
	required: true, email: true
	},
	instituicaoCadastro:{
	// campoMensagem será obrigatório (required) e terá tamanho mínimo (minLength)
	required: true
	},
	cursoCadastro:{
	// campoMensagem será obrigatório (required) e terá tamanho mínimo (minLength)
	required: true
	},
	periodoCadastro:{
	// campoMensagem será obrigatório (required) e terá tamanho mínimo (minLength)
	required: true
	},
	empresaCadastro:{
	// campoMensagem será obrigatório (required) e terá tamanho mínimo (minLength)
	required: true
	},
	cargoCadastro:{
	// campoMensagem será obrigatório (required) e terá tamanho mínimo (minLength)
	required: true
	}
	},

	// Define as mensagens de erro para cada regra
	messages:{
	nomeCadastro:{
	required: "Digite o seu nome!",
	minlength: "O seu nome deve conter, no mínimo, 3 caracteres"
	},
	emailCadastro:{
	required: "Digite o seu e-mail para contato!",
	email: "Digite um e-mail válido!"
	},
	instituicaoCadastro:{
	required: "Digite a instituição onde você estuda/leciona!"
	},
	cursoCadastro:{
	required: "Digite o curso que voce está matriculado/lecionando!"
	},
	empresaCadastro:{
	required: "Digite a empresa onde você trabalha!"
	},
	cargoCadastro:{
	required: "Digite o seu cargo na empresa!"
	},
	}
	});
	});
   </script>

 

O HTML é esse:

<form action="" method="post" enctype="multipart/form-data" id="formCadastro" name="formCadastro">
Nome: <input onkeydown="mascara(this,soLetras);" value="" name="nomeCadastro" type="text" /><br>
   Email: <input onkeydown="mascara(this,e_mail);" name="emailCadastro" type="text" /><br>
   CPF: <input onkeydown="mascara(this,cpf);" maxlength="14" name="CPFCadastro" type="text" /><br>
Data de Nascimento: <input onkeydown="mascara(this,data);" maxlength="10" name="dataNascCadastro" type="text" /><br>
   <br>
   <input type="radio" name="opcao" value="estudante" onclick="mudaparticipante(this.value)" checked="checked" id="tipoparticipante_0" />
<label>Estudante</label>
   | <input type="radio" name="opcao" value="profissional" onclick="mudaparticipante(this.value)" id="tipoparticipante_1" />
   <label>Profissional</label>
<br>
   <label id="labelInstEmpresa">Instituição de Ensino: </label><label id="fieldInstEmpresa"><input onkeydown="mascara(this,geral);" name="instituicaoCadastro" type="text" /></label><br>
   <label id="labelCursoCargo"> Curso: </label><label id="fieldCursoCargo"><input onkeydown="mascara(this,geral);" name="cursoCadastro" type="text" /></label><br>
   <label id="labelPeriodoVazio"> Período: </label><label id="fieldPeriodoVazio"><input onkeydown="mascara(this,geral);" name="periodoCadastro" type="text" /></label><br>
   <br>
<input name="cadastrar" type="submit" value="cadastrar" />
</form>

 

As demais máscaras já estão funcioando. Falta apenas a do CPF.

Até mais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

As demais máscaras já estão funcioando. Falta apenas a do CPF.

a duvida é com as mascaras ? ou com a validação ?

 

 

no caso da validaçao, faltou você chamar o método que você adicionou.

Em nenhum momento você manda ele validar o campo cpf.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que eu to com duvida realmente é qual função do cpf chamar.

Corrigindo o que eu disse: "As demais validações já estão funcionando!"

O evento do elemento HTML que eu devo chamar eu acredito que seja o OnBlur, para ser ativado quando o usuario tirar o "focus" daquele campo e assim ser sinalizado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

você ta extendendo o plugin, tem q usar o plugin. Olha:

      rules:{
               nomeCadastro:{  required: true, minlength: 3},
               emailCadastro:{
               // campoEmail será obrigatório (required) e precisará ser um e-mail válido (email)
                  required: true, email: true
               },
               CPFCadastro:{
                  required: true, cpf: true
               },

algo assim, entendeu ?

 

não analisei a tua implementação do extends, mas o que você vai passar ali no cpf: true é o parâmetro que você espera receber do outro lado.

 

enfim.. de onde você pegou essa implementação ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode marcar [Resolvido] =D

Tipo realmente faltou eu chamar a função no Script do Validator.

E outra, faltava eu especificar os parametros da funcão.

Dessa forma estava incorreta:

CPFCadastro:{
required: true, cpf:true
},

 

Dessa está correta:

CPFCadastro:{
required: true, cpf:(true,this,"both")
},

 

O "both" ai informa lá para minha função que a validação vai ser feita tanto pela formato, quanto pelo conteúdo.

Ou seja, ele vai testar se o cpf pertece à expressão regular que eu defini e se ele se enquadra quanto ao formato númerico de um CPF válido.

Valeu pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

é isso ai. parabéns.

 

é oque eu disse, não analisei a fundo como foi feita a implementação.

O papel aqui no forum é auxiliar, e isso acredito que consegui fazer.

 

Mostrei uma aplicação 'simples' para você ver oque deveria fazer.

Os detalhes dai em diante, é contigo. Afinal o projeto é teu.

 

 

:lol: Gz.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.