Ir para conteúdo
Fórum Script Brasil
  • 0

Dúvida sobre !, &&, return


LuanMesquita

Pergunta

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ã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.

Editado por Jonathan Queiroz
Remover 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

  • 0

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 certo

ele 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

Link para o comentário
Compartilhar em outros sites

  • 0

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ção

e 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 o

operador ! irá reverte para true, já que o operador ! reverteu a condição pra true, porque então o return false lá em baixo

nã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!

Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...