PHP, Validando e-mail com expressão regular

Para fazer a validação simples em um endereço de e-mail utiliza a seguinte expressão regular(Os escapes duplos são para aspas duplas, use escapes únicos para aspas simples):

^([a-z0-9_]|\\-|\\.)+@(([az0-9_]|\\-)+\\.)+[a-z]{2,4}$

Para chamar esse código você deve usar o eregi(). O ereg() não funcionará porque a pesquisa precisa ser sem distinção entre maiúsculas e minúsculas. Então, utilize a função da seguinte maneira:


if(!eregi(“^([a-z0-9_]|\\-|\\.)+@(([az0-9_]|\\-)+\\.)+[a-z]{2,4}$”,”$email”)){
die(“E-mail invalido.”);
}

A expressao regular anterior eh uma expressao regular de verificação de e-mail padrão, compatível com PHP, mas não eh a maneira mais segura de verificar um endereço de e-mail, ou seja, ela somente verifica se o padrão esta correto. Por exemplo alguém@ninguem.abc seria validado pois esta no formato correto, mesmo que ele não exista efetivamente.

A verificação pelo PHP é interessante para se certificar que o e-mail esta no padrão correto antes de inserir no banco de dados, porem, para uma melhor interface com o usuário, faça também a verificação via JavaScript.

http://www.couto.zuntto.com


13 Comentários on “PHP, Validando e-mail com expressão regular”

  1. […] Esse é bem simples, deve ser melhorado para consultas por e-mails válidos, você também pode pegar a lógica do post feito pelo Couto usado no PHP sobre isso, Clicando Aqui. […]

  2. otemponaopara disse:

    Muito bom cara… você tem pra CPF e pra CNPJ?

    ————–
    O Tempo Não Para
    otemponaopara.wordpress.com

  3. Muito bom, estou procurando artigos sobre regexp em javascript, para criticas sem submit do form.

    “otemponaopara”> CPF e CNPJ tem o algoritmo para validar por calculo, no gogole vc acha.

  4. Roger disse:

    Me ajudou, ótimo para vaidações de primeiro escalão.

    Só concerte uma coisa:

    if(!eregi(“^([a-z0-9_]|\\-|\\.)+@(([az0-9_]|\\-)+\\.)+[a-z]{2,4}$”,”$email”)){
    die(“E-mail invalido.”);
    }

    no bloco após o arroba incluir um hífem entre o az ficando então a-z, assim a validação aceitará tanto números quantos caracteres na parte de domínio do email, pois antes só estava aceitando números valeu.

  5. Não sei o que aconteceu mais não consegui validar com essa expressão, segue a que eu usei:
    eregi(“^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,3})$”,$_POST[‘email’])

    • Handrey Souza disse:

      tens que escapar o ponto antes das listas, senão ele vai interpretar como qualquer caracter, ele só interpreta como ponto literal quando está dentro da lista, pois lá todo mundo é igual (salvo raras excessões como o circunflexo)

  6. Mario disse:

    Usei a validação do Mayron e funcionou perfeitamente. Abraço

  7. Jason disse:

    if(!eregi(“^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,4}$”,”joao_augusto@locanet.com.br”)){
    print ‘email invalido’;
    }

  8. jcfr disse:

    a expressao nao funciona com dominios .com.pt ou .com.br etc
    troquem por:
    !eregi(“^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z.]{2,4}$”,”$email”)

  9. Tufaile disse:

    Valeu… mto obrigado…
    Fiz e Testei no meu curso funcionou certinho… a versão do php no wamp de lá é 5.2.8;
    incrementei agora meu form… mas,
    Acontece que uso em casa o wamp tambem, cuja a versão do php é 5.3.0 já tentei atualizar para 5.3.1
    e não roda alinha da função ereg() já tentei vários jeitos… e outras funções como por exemplo preg_match() mas acontece que sou meio iniciante nesse tal PHP então será que é algo relacionado com a versão?
    o aviso é o seguinte:
    Deprecated: Function ereg() is deprecated in C:\wamp\www…
    me ajudem?

  10. A função ereg() é depreceada no PHP 5.3
    Apesar de ainda funcionar, ela será excluída na próxima versão.
    Não se desespere. Substitua a função ereg() por preg_match() e adicione barras no início e fim da expressão regular.
    Troque:
    ereg(“^[a-z]$”,$variavel);
    Por:
    preg_match(“/^[a-z]$/”,$variavel);

    no caso da função eregi, adicione um i no final da expressão regular.
    Troque:
    eregi(“^[a-z]$”,$variavel);
    Por:
    preg_match(“/^[a-z]$/i”,$variavel);

    … e seja feliz!!!

  11. […] 3 – Selecionar registros que contenham arroba e ponto (e-mail) Esse é bem simples, deve ser melhorado para consultas por e-mails válidos, você também pode pegar a lógica do post feito pelo Couto usado no PHP sobre isso, Clicando Aqui. […]


Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s