Jump to content


Photo

Validate_email()


  • Faça o login para participar
19 replies to this topic

#1 Guilherme Blanco

Guilherme Blanco

    Loading...

  • Conselheiros
  • 891 posts
  • Sexo:Masculino
  • Localidade:São Carlos - SP/Brasil
  • Interesses:Programação Web e minha namorada (Maria Camila).

Posted 21/06/2005, 21:07

Sintaxe: validate_email(STR_EMAIL)
Retorno: Booleano
Descrição: Valida um email, retornando true/false caso o email seja válido/inválido.
Bibliotecas: Nenhuma
Limitações: PHP 3+


function validate_email( $email ) {
    return ( eregi( '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'. '@'. '[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+\.'. '[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$', $email ) );
}


Exemplo de utilização:

<?php echo "Email " . (validate_email("guilhermeblanco@dominio.com.br") ? "válido" : "inválido"); ?>


[]s,
<script language="WebFórum">
// Dados:
Nome("Guilherme Blanco");
Localidade("São Carlos - SP/Brasil");
Cargo("Manutenção");
</script>

#2 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 05/07/2005, 02:53

Hum ... será esta tua ER é a maneira correta de validar e-mais?! :unsure:

Andei por uma semana pesquisando o formato dos e-mails, li várias RFC's, a Wikipedia, sites registradores de domínios, etc etc etc. :rolleyes:

Cheguei num consenso ... :D

Pelo que pesquisei ...

Um nome de usuário deve seguir estas regras:
  • Possuir de 2 à 63 caracteres
  • Possuir caracteres alfanuméricos (insensitivo), pontos, hífens e sublinhados
  • Não pode iniciar ou terminar em pontuação
  • Não pode haver pontuação consecutiva
Sendo assim, para validar o nome de usuário, criei este grupo:

([A-Za-z0-9](([\w.-][^._-]{2,}){0,61})[A-Za-z0-9])

Já os domínios e sub-domínios, devem seguir estas regras:
  • Possuir de 2 à 63 caracteres
  • Possuir caracteres alfanuméricos (insensitivo) e hífens
  • Não pode iniciar ou terminar em hífen
Sendo assim, para validar os domínios e sub-domínios criei este grupo:

([A-Za-z0-9]([A-Za-z0-9-]{0,61})?[A-Za-z0-9]\.)+

Já o TLD, deve seguir estas regras básicas:
  • Possuir de 2 à 6 caracteres
  • Possuir caracteres alfabéticos
Sendo assim, para validar o TLD criei este grupo:

([A-Za-z]{2,6})

Pronto ! :D

Basta juntar estes grupos (inserindo o @ após o primeiro) e resultará em minha ER.*

* Não escrevi ela inteira porquê iria quebrar a tabela do fórum ... :P

[]’s :DAté mais

#3 Inu_yasha

Inu_yasha

    www.inuforum.cjb.net

  • Usuários
  • 269 posts
  • Sexo:Não informado

Posted 06/08/2005, 09:22

$nome = $_POST["nome"];
$email = $_POST["email"];
function validate_email( $email ) {
   return ( eregi( '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'. '@'. '[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+\.'. '[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$', $email ) );
}
$cadastrar = mysql_query("INSERT INTO news (nome, email) VALUES ('$nome', '$email')", $db);
if($cadastrar) {
echo "<script>window.alert('Email cadastrado com sucesso.'); </script>";
echo "<script>window.location = 'javascript:history.go(-1);'</script>";
}

eu n consigo inserir isso:
<?php echo "Email " . (validate_email("guilhermeblanco@dominio.com.br") ? "válido" : "inválido"); ?>
simplesmente não sei onde inserir. e nao entendi o q mais tem q modificar!

#4 Alex Hiroshi

Alex Hiroshi

    Super Veterano

  • Ex-Admins
  • 4923 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 06/08/2005, 09:50

Não precisa criar uma função, no seu caso, vc pode fazer a validação direto.
if(eregi(........($email)) {
// email ok
}
else {
// email invalido
}

Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Ex-Administrador

#5 Inu_yasha

Inu_yasha

    www.inuforum.cjb.net

  • Usuários
  • 269 posts
  • Sexo:Não informado

Posted 06/08/2005, 13:15

function validate_email( $email ) {
  return ( eregi( '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'. '@'. '[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+\.'. '[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$', $email ) );
}
$cadastrar = mysql_query("INSERT INTO news (nome, email) VALUES ('$nome', '$email')", $db);
if($cadastrar) {
echo "<script>window.alert('Email cadastrado com sucesso.'); </script>";
echo "<script>window.location = 'javascript:history.go(-1);'</script>";
}
else {
echo "<script>window.alert('Houve um erro ao tentar cadastrar seu email. Tente novamente!'); </script>";
echo "<script>window.location = 'javascript:history.go(-1);'</script>";
}
ficaria assim:
function validate_email( $email ) {
  return ( eregi( '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'. '@'. '[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+\.'. '[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$', $email ) ) {

$cadastrar = mysql_query("INSERT INTO news (nome, email) VALUES ('$nome', '$email')", $db);
if($cadastrar) {
echo "<script>window.alert('Email cadastrado com sucesso.'); </script>";
echo "<script>window.location = 'javascript:history.go(-1);'</script>";
}
else {
echo "<script>window.alert('Houve um erro ao tentar cadastrar seu email. Tente novamente!'); </script>";
echo "<script>window.location = 'javascript:history.go(-1);'</script>";
} else {
echo " email invalido";
}

??

#6 Alex Hiroshi

Alex Hiroshi

    Super Veterano

  • Ex-Admins
  • 4923 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 06/08/2005, 21:39

Teste e veja se funciona..

Mas não, não precisa usar a função ( http://www.php.net/m...R/functions.php ), faça como eu falei.. está praticamente pronto, basta trocar os ...... pela ER
Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Ex-Administrador

#7 Inu_yasha

Inu_yasha

    www.inuforum.cjb.net

  • Usuários
  • 269 posts
  • Sexo:Não informado

Posted 06/08/2005, 22:42

<?php

include "config.php";

$nome = $_POST["nome"];
$email = $_POST["email"];
$cadastrar = mysql_query("INSERT INTO news (nome, email) VALUES ('$nome', '$email')", $db);
if(eregi( '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'. '@'. '[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+\.'. '[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$', ($email)) {
if($cadastrar) {
echo "<script>window.alert('Email cadastrado com sucesso.'); </script>";
echo "<script>window.location = 'javascript:history.go(-1);'</script>";
} else {
echo "<script>window.alert('Houve um erro ao tentar cadastrar seu email. Tente novamente!'); </script>";
echo "<script>window.location = 'javascript:history.go(-1);'</script>";
}
?>
so da erro.

Parse error: parse error, unexpected '{' in c:\appserv\www\news\upload\cad.php on line 14!

Edição feita por: Inu_yasha, 06/08/2005, 22:49.


#8 Alex Hiroshi

Alex Hiroshi

    Super Veterano

  • Ex-Admins
  • 4923 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 06/08/2005, 23:04

Isso é logico...
A validação é antes de inserir no banco né..
Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Ex-Administrador

#9 Inu_yasha

Inu_yasha

    www.inuforum.cjb.net

  • Usuários
  • 269 posts
  • Sexo:Não informado

Posted 06/08/2005, 23:10

if(eregi( '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'. '@'. '[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+\.'. '[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$', ($email)) {
$cadastrar = mysql_query("INSERT INTO news (nome, email) VALUES ('$nome', '$email')", $db);

<?php

include "config.php";

$nome = $_POST["nome"];
$email = $_POST["email"];
if(eregi( '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'. '@'. '[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+\.'. '[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$', ($email)) {
$cadastrar = mysql_query("INSERT INTO news (nome, email) VALUES ('$nome', '$email')", $db);
}
if($email) {
echo "<script>window.alert('Email cadastrado com sucesso.'); </script>";
echo "<script>window.location = 'java script:history.go(-1);'</script>";
} else {
echo "<script>window.alert('Houve um erro ao tentar cadastrar seu email. Tente novamente!'); </script>";
echo "<script>window.location = 'java script:history.go(-1);'</script>";
}
?>


Parse error: parse error, unexpected '{' in c:\appserv\www\news\upload\cad.php on line 7!
mas porque isso? o q eu fiz de errado?

Edição feita por: Dudu, 21/06/2009, 13:09.


#10 Felipe Pena

Felipe Pena

    O temor do Senhor é o princípio da sabedoria

  • Ex-Admins
  • 6441 posts
  • Sexo:Masculino

Posted 06/08/2005, 23:53

Veja assim:

<?php
include "config.php";

$nome = $_POST['nome'];
$email = $_POST['email'];

if( eregi('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'. '@'. '[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+\.'. '[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$', $email) )
{
    $cadastrar = mysql_query("INSERT INTO news (nome, email) VALUES ('$nome', '$email')", $db);
}

if( $email )
{
    echo "<script>window.alert('Email cadastrado com sucesso.'); </script>";
    echo "<script>window.location = 'javascript:history.go(-1);'</script>";
}
else
{
    echo "<script>window.alert('Houve um erro ao tentar cadastrar seu email. Tente novamente!'); </script>";
    echo "<script>window.location = 'javascript:history.go(-1);'</script>";
}
?>

[]'s
Felipe Pena
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29

#11 Inu_yasha

Inu_yasha

    www.inuforum.cjb.net

  • Usuários
  • 269 posts
  • Sexo:Não informado

Posted 06/08/2005, 23:56

Felipe, muito obrigado, irei lhe dar os devidos créditos por me ajudar com o validador de email!

#12 rivi

rivi

    Novato no fórum

  • Usuários
  • 6 posts
  • Sexo:Não informado

Posted 22/09/2005, 11:46

Usando essa função do vidaloka, alguns emails que ao meu ver são válidos acabam sendo identificados como inválidos, como:

1.rivi@terra.com.br
rivi.1@terra.com.br
rivi_1@terra.com.br

mas emails como rivi.a1@terra.com.br são válidos. Não entendo quase nada de Expressão Regular, mas ao meu ver ele exige pelo menos dois caracteres depois da pontuação.

Os emails com 1 caractere depois da pontuação são inválidos mesmo? Ou tem alguma forma de corrigir isso?

#13 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 24/01/2006, 10:07

Usando essa função do vidaloka, alguns emails que ao meu ver são válidos acabam sendo identificados como inválidos, como:

1.rivi@terra.com.br
rivi.1@terra.com.br
rivi_1@terra.com.br

mas emails como rivi.a1@terra.com.br são válidos. Não entendo quase nada de Expressão Regular, mas ao meu ver ele exige pelo menos dois caracteres depois da pontuação.

Os emails com 1 caractere depois da pontuação são inválidos mesmo? Ou tem alguma forma de corrigir isso?

Ops, cheguei atrasado ? :unsure:

Então ... o problema é que há uma regra de que define que os e-mails terão o formato X. Só que cada provedor de e-mail pega essa regra X, implementa isso ou aquilo, tornando-a Y. Entende ? :wacko:

Este é o maior problema de se validar um e-mail corretamente. As regras mudam à cada provedor de e-mail. :(

Uma saída seria usar uma ER genérica, como esta:
^([\w\.-]+)\@([\w\.-]+)+\.([a-z]{2,6})$
[]’s :DAté mais

#14 Bruno Augusto

Bruno Augusto

    ∙•● Restarting... ●•∙

  • Usuários
  • 1968 posts
  • Sexo:Não informado
  • Localidade:Itajubá

Posted 17/10/2006, 14:14

Ressucitador de tópicos geral :P

Pensava que não usaria uma validação dessa...ãh...magnitude...isso, essa era a palavra (rs).

Mas já que preciso usar e não quero ter meu tópico fechado por reusar um assunto aí vai.

Eu usei a mesma ER do Paulo Freitas, só que pra deixar mais "bonitim e organizadim" coloquei num array e simulei uma validação com um IF/ELSE comum.

$pattern	=	array(
								  'username'	=>	'([A-Za-z0-9](([\w.-][^._-]{2,}){0,61})[A-Za-z0-9])',
								  'domain'		=>	'([A-Za-z0-9]([A-Za-z0-9-]{0,61})?[A-Za-z0-9]\.)+',
								  'TLD'			=>	'([A-Za-z]{2,6})',
								 );
			print "<pre>";print_r($pattern);print "</pre><br><br>";
								 
			if( eregi( $pattern['username'] . '@' . $pattern['domain'] . $pattern['TLD'], 'rivi_1@terra.com.br' ) )
			{
				print "Valido";
			}
			else
			{
				print "Invalido";
			}
E está dando o mesmo problema que o rivi levantou há, bem quase um ano atrás (credo!).

Seria possível alterar essa ER originalmente postada ser "liberar geral"?

[]'s

#15 Felipe Pena

Felipe Pena

    O temor do Senhor é o princípio da sabedoria

  • Ex-Admins
  • 6441 posts
  • Sexo:Masculino

Posted 17/10/2006, 16:12

Segundo umas regras que li a respeito de domínios juntamente com as informações dadas pelo Paulo no começo do tópico:

/^\w(?:([.-])(?!(?1))|\w){0,61}\w@(?:([0-9a-záàâãçéêíóôõú])(?:(?2)|-(?!-)){0,61}(?2)\.)+[[:alpha:]]{2,6}$/i

Mas não sei o limite de subdomínos, assim ficou aceitando demais.

Exemplo:
foo@foo.bar.foo.bar.com

Observação: A ER só pode ser utilizada com a versão da lib PCRE 6.6.

Edição feita por: Eclesiastes, 23/03/2007, 12:09.
Acréscimo de informação.

Felipe Pena
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq