LuanMesquita Postado Julho 17, 2010 Denunciar Share Postado Julho 17, 2010 (editado) 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;if(!(parte1 >= 2 && parte2 >= 6 && parte3 >= 9)){alert("O Campo deve conter um endereço eletronico correto!");document.cadastro.email.focus();return false;}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ãoconsigo 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 dooperador lógico && que retorna verdadeira se ambas as expressões forem verdadeiras, só que o operadorlógico ! retornará falso caso os operandos sejam verdadeiros, então na "minha lógica" essa expressãoretornará false junto com o return false que está em baixo então não iria para a página teste.php e sim ficarem 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. Editado Julho 17, 2010 por Jonathan Queiroz Remover caixa alta do título conforme regra 3.7 e adicionar tag's (Jonathan) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 M@RcOs pS09 Postado Julho 18, 2010 Denunciar Share Postado Julho 18, 2010 LuanMesquita,Questão 1:a parte1 guarda a posição do primeiro @ na string;a parte2 guarda a posição do primeiro . na string;a parte3 guarda o tamanho da string;if(!(parte1 >= 2 && parte2 >= 6 && parte3 >= 9)){Olha só: se a primeira ocorrêcia de arroba estiver numa posição maior ou igual a 3º posicao (começa do 0) e se a primeira ocorrêcia do . estiver numa posição maior ou igual a 7º posicao e se o tamanho da string for maior o igual a 9, então:Meu email está correto! Eu não preciso mostrar mensagem alguma! Daí o negado (!) pelo fato de que se tudo estivesse certoele mostraria a mensagem mas, neste caso com o negado, se tudo estiver certo, ele vai para o else que no nosso caso não existe.Se uma ou mais condições das citadas acimas forem inválidas:Meu email está incorreto. Entaum (parte1 >= 2 && parte2 >= 6 && parte3 >= 9)me retorna falso, pois é necessário todas serem verdadeiras. Porém eu não quero usar o else, daí eu nego, pois a condição inversa que me interessa.Então !(parte1 >= 2 && parte2 >= 6 && parte3 >= 9) me retorna true, mostrando a mensagem!Questão 2: Irá retornar falso se, e somente se, uma ou mais das condições acimas forem inválidas. Por que?Pois se uma das condições (parte1 >= 2 && parte2 >= 6 && parte3 >= 9) forem inválidas, então, eu entro no escopo deste if ( {...} ), aí então será retornado false, ou seja, o form não é submetido. Caso contrário, nada acontece: o form é submetido.Para exemplificar melhor, se eu não usasse o negado, ficaria assim:if(parte1 >= 2 && parte2 >= 6 && parte3 >= 9) { //esta parte não me interessa, pois o email está ok! }else{ { alert("O Campo deve conter um endereço eletronico correto!"); document.cadastro.email.focus(); return false; }Espero ter ajudado.Att Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 LuanMesquita Postado Julho 19, 2010 Autor Denunciar Share Postado Julho 19, 2010 Cara deixa ver se eu entendi.Então quando a condição:if(!(parte1 >= 2 && parte2 >= 6 && parte3 >= 9)){alert("O Campo deve conter um endereço eletronico correto!");document.cadastro.email.focus();return false;}1° - Se Estiver tudo certo, se a pessoal digitou o email tudo certinho como está no código, retornará true, então o operador ! entrará em ação para tornar false essa condição true, só que o operador ! só retornaráfalse caso tenha um else, como não têm ele não irá fazer nada. Correto?2° - Caso o email da pessoa esteja incorreto, a condição irá retornar false, então o operador ! entra em açãoe transformará a condição false para true e assim é exibido:alert("O Campo deve conter um endereço eletronico correto!");document.cadastro.email.focus();return false;}Correto?Fiquei com uma dúvida crucial, caso então que a pessoa digite o email incorreto a condição irá retornar false más ooperador ! irá reverte para true, já que o operador ! reverteu a condição pra true, porque então o return false lá em baixonão "reverte" para true e o form é submetido?. Ou só importará para o return se reverte em true caso a condição(parte1 >= 2 && parte2 >= 6 && parte3 >= 9) seja verdadeira?abs, Marcos! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 M@RcOs pS09 Postado Julho 19, 2010 Denunciar Share Postado Julho 19, 2010 LuanMesquita,1°) Correto. 2º) Correto.Olha só: Ao contrário do pascal, o return funciona como um término de uma função! Quando um return é invocado, o cursor volta para o local que foi chamado (desempilha). Por exemplos.: Para ficar mais prático, coloque um alert antes do return true, veja:... return false; } alert("Chegou aqui!"); return true; ... Você vai notar que quando o return false for invocado (quando um e-mail é inválido), a mensagem não será exibida, o que significa que a função terminou antes dela: no return false! Outro exemplo: function teste(exibir) { if (!exibir) return; alert("Você optou por exibir!"); }Na função acima, se você instanciá-la como teste(false), nada acontecerá pois o return foi invocado. Agr, se você instanciá-la como teste(true), uma mensagem será exibida!Espero ter ajudado.Att Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 LuanMesquita Postado Julho 19, 2010 Autor Denunciar Share Postado Julho 19, 2010 Então uma função só irá presseguir caso seja true, porque se for false, ela iráterminar antes do true e não acontecerá nada depois do true correto?Cara Vlww mesmo, aprendi sobre operadores ! e && e um pouco más sobre o returnvlw mesmo cara, Obrigado.Tenha um bom dia. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 LuanMesquita Postado Julho 19, 2010 Autor Denunciar Share Postado Julho 19, 2010 cara fiquei com uma dúvida.function teste(exibir){ if (!exibir) return; alert("Você optou por exibir!");}cara más se eu instanciá-la assim:function teste(exibir){ if (!false) return; alert("Você optou por exibir!");}o operador ! não irá retornar true?e assim mostra o alert?abs Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 M@RcOs pS09 Postado Julho 19, 2010 Denunciar Share Postado Julho 19, 2010 LuanMesquita,Não, pelo fato de a condição ser verdadeira, então o return será executado, o que levá ao fim da função!Att Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
LuanMesquita
Segue o Script que estou com dúvida.
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:
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.
Editado por Jonathan QueirozRemover caixa alta do título conforme regra 3.7 e adicionar tag's (Jonathan)
Link para o comentário
Compartilhar em outros sites
6 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.