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

Array E Função Pra Validar Email


[ GuTo ]

Pergunta

Fala galera!

Eu fiz uma função em ASP que eu considero perfeita para validar emails.

Agora estou tentando transcreve-la pro JavaScript.

Dae assim, tem uma parte desta função onde eu guardo num array, os caracteres que não são permitidos no email.

Dae no ASP faço assim:

Carac = Array("!","#","$","%","&","*","(",")","+","=","/","\","|","?","'","""","{","}","[","]","ª","º",":",",",";","§","°","<",">")
E imagino que no javascript, só mude uma coisinha, o tal do new na frente. Assim:
Carac = new Array("!","#","$","%","&","*","(",")","+","=","/","\","|","?","'","""","{","}","[","]","ª","º",":",",",";","§","°","<",">")

Mas parece não ficar correto no JS isso.

Acho que a barra contrária/invertida (\) não poderia estar neste array.

De qualquer forma, eu até cheguei a tira-la do array, mas permanece o erro.

No IE q aponta os erros de JS, mostra um erro como se estivesse faltando fechar o parenteses ) do array.

Alguém de vocês sabe o que pode ser?

Link para o comentário
Compartilhar em outros sites

15 respostass a esta questão

Posts Recomendados

  • 0

Guto, é exatamente isso que você pensou, mesmo... só que no JS (acredito que no ASP seja diferente, pelo exemplo que você postou), a barra invertida serve pra escapar o caractere da frente. Então, como esse array é formado por strings, você delimita o valor de cada elemento com aspas... só que quando você faz isto: "\", ele interpreta que você abriu uma string e que o primeiro caractere dela é uma aspa dupla... e vai continuar interpretando que é uma string até encontrar uma aspa dupla sem barra de escape antes, sacou o motivo do erro no IE?

O certo seria você escapar a barra invertida pra esse elemento: "\\"

Tenta assim, acho que dará certo...

Abraços!

Link para o comentário
Compartilhar em outros sites

  • 0

Isso mesmo Illidan! biggrin.gif

Mas tinha mais uma coisinha!

Eu queria também retirar as aspas duplas, dae ficava assim: " "" "

Saca? Dae dava erro!

Então tirei e tá certo!

Ae agora olha isso!

email = "gutoasp@pop.com.br"
Carac = new Array("!","#","$","%","&","*","(",")","+","=","/","\\","|","?","'","{","}","[","]","ª","º",":",",",";","§","°","<",">")
	for(i=0; i<Carac.length; i++)
	if (email.indexOf(Carac(i),0) > 0) return false

quando chega nesta parte do loop, tá dando erro.

Se puder me ajudar biggrin.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Claro... smile.gif

Bom, a função indexOf() retorna o índice da primeira ocorrência de um caractere (ou substring), ou retorna -1 caso ele não exista na string. Sendo assim:

email = "gutoasp@pop.com.br"

Carac = new Array("!","#","$","%","&","*","(",")","+","=","/","\\","|","?","'","{","}","[","]","ª","º",":",",",";","§","°","<",">")

for(i=0; i<Carac.length; i++)

    if (email.indexOf(Carac) != -1)

        return false

Mas, cara... acho que essa função não vai validar de uma forma muito segura, não... pensa bem, e se o cara digitar algo como: aaa@aaa

Entendeu? O ideal é você fazer essa validação com expressões regulares... eu tenho um exemplo com PHP. Vou adaptá-lo pra JS e depois posto aqui.

Link para o comentário
Compartilhar em outros sites

  • 0

Illidan!

No array, na hora ali de escrever o caracteres X, eu tava fazendo como no ASP, usando aspas... dae você me lembrou do ... tinha esquecido por um instante disso do JS. tongue.gif

mbleonardo!

quanto a aspas duplas, eu fiz dakele jeito: " \" " biggrin.gif

Agora confiram a minha função pra validar email, e mais junto a página pra poder testar:

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Validando email</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script language="JavaScript" type="text/javascript">
<!--
/* Funcao que valida o email
Feito por Antonio Augusto André Silveira
Mais conhecido como [ GuTo ]
Data: 13/02/2005 04:45:00
Contato:
Email: gutoasp@pop.com.br
MSN: gutoasp@hotmail.com
ICQ: 108662800 */
function validaEmail(email) {
	var pos, aux, pos2, dominio, carac, i
	email = email.toLowerCase() //gutoasp@pop.com.br

	if (email.indexOf("@",0) == -1 || email.length <= 10) return false
	pos = email.indexOf("@",0) //no ASP 8, JS 7
	aux = email.substring(pos+1) //pop.com.br

	if (aux.indexOf(".",0) < 3) return false

	pos2 = aux.indexOf(".",0)
	dominio = aux.substr(0,pos2)//pop

	if (dominio.length < 3) return false

	carac = new Array("!","#","$","%","&","*","(",")","+","=","/","\\","|","?","'","\"","{","}","[","]","ª","º",":",",",";","§","°","<",">")
	for(i=0; i<carac.length; i++) if (email.indexOf(carac[i],0) != -1) return false

	return true
}

function check() {
	var email = document.form.email.value
	if (validaEmail(email)) {
  alert("Válido")
  return true
  }
	else {
  alert("Inválido")
  return false
	}
}
// -->
</script>
</head>

<body>
<form name="form" onsubmit="return check();">
<input type="text" name="email" id="email">
<input type="submit">
</form>

<script>
	var pos, aux, pos2, dominio, carac, i
	email = "GUTOASP@pop.com.br"
document.write('<br>email= ' + email)
	email = email.toLowerCase() //gutoasp@pop.com.br

	//if (email.indexOf("@",0) == -1 || email.length <= 10) return false
	pos = email.indexOf("@",0) //no ASP 8, JS 7
	aux = email.substring(pos+1) //pop.com.br

	//if (aux.indexOf(".",0) < 3) return false

	pos2 = aux.indexOf(".",0)
	dominio = aux.substr(0,pos2)//pop

document.write('<br>email2= ' + email)
document.write('<br>pos= ' + pos)
document.write('<br>aux= ' + aux)
document.write('<br>pos2= ' + pos2)
document.write('<br>dom= ' + dominio)
	//if (dominio.length < 3) return false

	carac = new Array("!","#","$","%","&","*","(",")","+","=","/","\\","|","?","'","\"","{","}","[","]","ª","º",":",",",";","§","°","<",">")
	for(i=0; i<carac.length; i++)
  document.write('<br>'+carac[i])

	// if (email.indexOf(carac[i],0) != -1) return false

</script>

</body>
</html>

Só passa um email, esteticamente correto, do tipo: aaa@aaa.com

Se alguém tiver alguma sugestão pra melhorar a função, sou todo "ouvidos, ou melhor, "olhos".. hehehe

Até mais,

Abraços! biggrin.gif

Link para o comentário
Compartilhar em outros sites

  • 0

up!

Link para o comentário
Compartilhar em outros sites

  • 0

up!

Link para o comentário
Compartilhar em outros sites

  • 0

Só queria saber se vocês sabem tem algo a mais a acrescentar neste função que fiz?

Pois, como o Illidan falou antes, um email como este: aaa@aaa.aaa

passa pela verificao!

Como este: aaa@bbb.br passaria também!

Então, qual é a sugestão que dariam pra melhorar a função?

Eu tinha pensado em fazer assim: pegar o user do email e o dominio do email, no caso de aaa@bbb.com, seriam:

- usuario: aaa

- dominio: bbb

Se eles forem iguais, seria inválido.

Mas não podemos fazer este, pois existe diversos emails assim: scriptbrasil@scriptbrasil.com

Então... não sei o que mais poderia validar!

Dae por isso, peço a sugestão de vocês para a melhora desta função que criei, que estou até disponibilizando pra vocês usarem aonde quiserem, desde que mantenham ela do jeito q está e os meus créditos nela. beleza? biggrin.gif

Até mais!

Link para o comentário
Compartilhar em outros sites

  • 0

Guto,

Aquilo que eu falei (que ela deixaria passar um "aaa@aaa") foi porque eu acreditava que a sua função era baseada naquele array e naquele laço, entende? Se você quer validar se um e-mail existe de verdade (checando usuário e server), só vi um código até hoje que fazia isso... escrito em PHP. Mas não estou conseguindo acessar... bom, se você se interessar, o site é http://www.phpclasses.com. você encontra esse código no usuário Manuel Lemos.

Com javascript somente, seria impossível você validar se um e-mail existe de verdade... o máximo que você vai poder validar é se o padrão de caracteres digitados no campo de e-mail é compatível com o padrão de um e-mail válido. Isso você pode fazer com expressões regulares... mas, de qualquer forma, uma função assim ainda deixaria passar um aaa@aaa.com :/

[]'s!

Link para o comentário
Compartilhar em outros sites

  • 0

Então Illidan, imagino que minha função, apesar de maior que uma expressão regular, expressa com outras palavras a mesma coisa, valida o máximo possível um email, certo?

Acho que o máximo que ela pode fazer!

Se tu tiveres alguma idéia a mais, por favor, contribua! biggrin.gif

E se possível, mostre sua expressão regular pra eu testar! biggrin.gif

Até mais!

Link para o comentário
Compartilhar em outros sites

  • 0

Guto,

Aqui está a minha função com expressões regulares:

        /**

         * validate email strings

         *

         * @author: Carlos Reche

         * @email:  carlosreche@yahoo.com

         */

        function validateEmail(email)

        {

            if (typeof(email) != "string")

                return false;

            else if (!email.match(/^[A-Za-z0-9]+([_.-][A-Za-z0-9]+)*@[A-Za-z0-9]+([_.-][A-Za-z0-9]+)*\.[A-Za-z0-9]{2,4}$/))

                return false;

            return true;

        }

E aqui está um código pronto pra testá-la:

<html>

  <head>

    <title>Validate e-mail</title>

    <script type="text/javascript">

        /**

         * validate email strings

         *

         * @author: Carlos Reche

         * @email:  carlosreche@yahoo.com

         */

        function validateEmail(email)

        {

            if (typeof(email) != "string")

                return false;

            else if (!email.match(/^[A-Za-z0-9]+([_.-][A-Za-z0-9]+)*@[A-Za-z0-9]+([_.-][A-Za-z0-9]+)*\.[A-Za-z0-9]{2,4}$/))

                return false;

            return true;

        }

        function checkEmail(obj)

        {

            var message = (validateEmail(obj.value)) ? "Valid!" : "Invalid!";

            document.getElementById("message").innerHTML = message;

        }

    </script>

  </head>

  <body style="text-align: center; padding: 150px 0px; font-size: 20px;">

    E-mail: <input type="text" name="email" id="email" onkeyup="checkEmail(this);" />

    <div id="message" style="margin: 20px auto; font-size: 17px; font-weight: bold; color: #c00;"></div>

  </body>

</html>

Link para o comentário
Compartilhar em outros sites

  • 0

Grande Illidan!

Mas brother, fiz uns testes nesta função em Regular Expression, e ela deixa vazar uns emails bem bobos. Um deles é a@a.co

A minha eu melhorei e acho que agora ficou bem melhor.

É grandinha, mas valida legal. Tem 18 linhas.

Agora eu vou transcrevê-la pro ASP. biggrin.gif

Regular Expression eu nunca estudei.

Uma hora eu até pego pra dar uma olhada.

Até mais! biggrin.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Opa, e ae pessoal!

Sei que sou chato quanto a pequenas coisas, mas como já falei em diversos tópicos, eu tenho mania de perfeitção, querer tudo certinho.

Então,pergunto-lhes: Qual foi o maior email que vocês já viram?

Quero dizer, o máximo de caracteres num email q vocês já viram.

Ex.: contato@ulbra.br -> Contém 17 caracteres.

E também, o maior número caracteres de um user num email vocês já viram.

Ex.: gutoasp@pop.com.br

User: gutoasp -> 7 caracteres.

Agora porque quero saber disso?

Para tornar a função que valida o email ainda melhor.

A maioria dos servidor dizem que o email deve ter no mínimo 4 ou 6 caracteres e no máximo 15, mas alguns server acho q permitem até 20, acho q não mais.

Então é isso, por favor ajudem nesta pesquisa! biggrin.gif

Abraços!

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
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...