Ir para conteúdo

Arquivado

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

LuanMesquita

!, && e return

Recommended Posts

Segue o Script que estou com dúvida.

 

<html>

<head>

<title>Valida_email</title>


<script language="javascript">

<!--

function valida(){



if(document.cadastro.email.value == ""){

alert("Preencha o campo e-mail.");

return false;

}


parte1= document.cadastro.email.value.indexOf("@");


parte2= document.cadastro.email.value.indexOf(".");



parte3= document.cadastro.email.value.length;



[b]if(!(parte1 >= 2 && parte2 >= 6 && parte3 >= 9)){

alert("O Campo deve conter um endereço eletronico correto!");

document.cadastro.email.focus();

return false;

}[/b]

return true;

}


//-->

</script>
</head>

<body>

<form name="cadastro" action="teste.php" method="post" onSubmit="return valida()">


<table width="428" border="1" cellpadding="5" cellspacing="0" bordercolor="#000000" class="table">

<tr>

<td> EMAIL</td>

<td><input type="text" name="email" size=40></td>

</tr>


<tr>


<td colspan=2 align="center">

<input name="enviar" type="submit" value="Enviar">

<input name="enviar2" type="reset" value="Limpar">

</td>

</table>

</form>

</body>
</html>

 

 

Minha dúvida está em negrito, não está entrando em minha cabeça essa lógica, e as vezes não

consigo nem dormi tentado adivinhar essa lógica, e aposto que deve ser babinha.

 

 

 

 

 

 

1° Não estou conseguindo entender como funciona o if(!(parte1 >= 2 && parte2 >= 6 && parte3 >= 9)),

se digito no campo por exemplo, luan@hotmail.com , a variável parte1 irá vêr se é maior do que do 2 até

o @? ou outro exemplo, a variável parte2 irá vêr se é maior que 6 só depois do @ até o .?

ou ela irá contar desde o primeiro caractere do campo que é o l?

 

 

 

______________

 

 

 

2° A outra dúvida é o seguinte, essa é mais complicada para mim.

analisando código:

 

if(!(parte1 >= 2 && parte2 >= 6 && parte3 >= 9)){

 

alert("O Campo deve conter um endereço eletronico correto!");

 

document.cadastro.email.focus();

 

return false;

 

 

A expressão (parte1 >= 2 && parte2 >= 6 && parte3 >= 9) iria retornar verdadeira por causa do

operador lógico && que retorna verdadeira se ambas as expressões forem verdadeiras, só que o operador

lógico ! retornará falso caso os operandos sejam verdadeiros, então na "minha lógica" essa expressão

retornará false junto com o return false que está em baixo então não iria para a página teste.php e sim ficar

em foco, só que o problema é que está indo para a página teste.php quando clico em enviar.

 

Alguém pode me explicar por favor em detalhes essa parte, pois estou enlouquecendo com isso.

 

Agradeço a Todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Penso que é mais coerente responder à segunda pergunta primeiro. Não é possível que o formulário seja enviado sem que a expressão seja negada (no caso). Computador não é vidente, é pura matemática. Ele simplesmente verifica se o campo não segue aquelas regras, dá o alert e não envia a requisição.

 

Agora voltemos à primeira :]

A expressão verifica a quantidade de caracteres (exceto os especiais: "@" e ".") que o e-mail contem, mas ele é simples demais e não faz o trabalho direito, aceitando e-mails sem domínio, exemplo:

 

maisdenovechars@.

@maisde.novechars

Entendeu? Tem 9 caracteres? mais os dois especiais (não importando a ordem)? Pode passar!

 

Veja um script eficiente, retirado daqui:

 

<script>
function validate(form_id,email) {
   var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
   var address = document.forms[form_id].elements[email].value;
   if(reg.test(address) == false) {
      alert('Invalid Email Address');
      return false;
   }
}
</script>
<form id="form_id" method="post" action="action.php" onsubmit="javascript:return validate('form_id','email');">
   <input type="text" id="email" name="email" />
   <input type="submit" value="Submit" />
</form>
Falou!

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.