Ir para conteúdo

POWERED BY:

Arquivado

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

guhfloripa

[Resolvido] maneira correta para validar email

Recommended Posts

Ontem, eu estava navegando na internet e li um artigo sobre a maneira correta pata validar um email via php/javascript.

O codigo é realmente bom mas muito grande, entretando é a maneira correta para se fazer isso.

Você pode conferir o artigo aqui: http://www.linuxjournal.com/article/9585

 

Como dá para ver no artigo, se fosse realmente validar um email sem limitar realmente nenhum email, seria necessario umas 20 linhas de código.

 

Então eu gostaria de fazer de uma maneira mais simples, e não limitar o usuário, para não correr o risco de perder nenhum usuário, na página de registro do sistema.

 

 

Eu gostaria de formular a expressão regular que aceitasse tudo + @ + aceitasse tudo.

 

Formulei isso aqui; preg_match(/^(.+)@(.+)/)

 

Porém ele ainda permite colocar dois @, por exemplo asa@asda@as.com

 

Queria limitar apenas para um @, alguem sabe como deve ficar a REGEX?

Estava pensando em algo assim (^@.+) Mas não funciona.

 

Thank you.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A partir da versão 5.2.0 do PHP você pode utilizar a função filter_var para validar e-mails.

 

Exemplo:

 

$email = 'fulano@dominio.com.br';
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo 'E-mail válido!';
} else {
echo 'E-mail inválido!';
}

 

Eu também costumo usar uma expressão regular bem complexa que peguei da classe PHPMailer, essa provavelmente serve para validar todo e qualquer tipo de e-mail:

 

$email = 'fulano@dominio.com.br';
if (preg_match('/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/', $email)) {
echo 'E-mail válido!';
} else {
echo 'E-mail inválido!';
}

 

Um abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Conforme em um dos comentários, no artigo e a resposta do próprio autor, a funcão própria do php também possui alguns erros;

 

It might also be worth noting, for those who don't know, that PHP has an in-built function for validating email addresses:

 

filter_var($email_address, FILTER_VALIDATE_EMAIL)

 

filter_var($email_address, FILTER_VALIDATE_EMAIL) doesn't cover all RFC specifications, for example, umlauts.

 

Quer dizer que ainda irá bloquear alguns emails corretos.

 

E sobre essa função que voce passou acima, irá bloquear emails como:

 

joao@IP - Exemplo: Joao@209.12.123.123

 

Entende?

 

 

O que estou querendo montar é uma REGEX, para (aceitar tudo) + @ + (aceitar tudo) e permitindo apenas um @ na REGEX.

 

Eu fiz algo assim, mas não trabalha; (/^(.+^@)@(.+^@)/)

 

Isso aqui parece tambem nao funcionar: [^@]+@[^@]+

 

Quero aceitar tudo, mas so 1 arroba. que já foi definido bem no meio .+@.+ (mas o . ele aceita @) =/

 

Você sabe o que está errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, eu nunca vi um e-mail que não utilize um domínio e em vez dele utilize um número de IP. Até onde eu sei um e-mail deve possuir um hostname com registros de DNS devidamente configurados para ser considerado legítimo, jamais apenas um IP.

 

Sinceramente eu acho que você está colocando chifre em cabeça de cavalo e se deixando levar demais por um simples post que leu na internet.

 

Você acha que se fosse normal um e-mail nesse formato a maioria das expressões regulares criadas para validação de e-mail não iriam aceitá-lo?

 

De qualquer forma vou tentar criar aqui uma expressão do jeito que você quer, acredito que uma lista negada antes e depois do arroba (permitindo todos os caracteres menos o arroba) deva resolver.

 

 

EDIT:

 

Acredito que seja isso o que você quer:

 

if (preg_match('/^[^@]+@[^@]+$/', $email)) {
   	echo 'E-mail válido!';
} else {
   	echo 'E-mail inválido!';
}

 

Aceita qualquer coisa antes e depois do arroba, porém só aceita um arroba no meio. ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela ajuda Leozitho. :)

 

Sim, eu sou detalhista, pode ser isso mesmo. Mas para empresas grandes, talvez possa representar uma perda significativa.

 

Pelo que li, acredito que email no formato: joao@IP é possível. Imagine que voce contrate um servidor dedicado, voce tera um IP exclusivo para o servidor, se for no cpanel voce pode configurar um email nele, irá ficar joao@IP_DO_SERVIDOR só nao sei se o email chegará, mas acredito que sim...

 

Edit, vou verificar a função, obrigado. :joia:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora que vi que a expressão que eu postei está igual uma que você disse que tentou e não deu certo. Eu testei aqui e funcionou, é que você deve ter esquecido de colocar o ^ e $ pra não aceitar nada antes nem depois.

 

Quando você contrata um servidor dedicado precisa ter um hostname, exemplo: serv0001.dominio.com.br. O e-mail default do servidor geralmente é root@serv0001.dominio.com.br.

 

E-mail usando IP eu nunca vi. :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que você entende de expressao regular, o script dele está negando IP depois do @??? Então significa que IP apos o @ é invalido?? :huh:

 

É isso mesmo, a expressão verifica se é um IP e se não for continua.

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.