1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

RegExp + Mail validator

Discussão em 'Web Development' iniciada por OldMan, 9 de Abril de 2009. (Respostas: 18; Visualizações: 1041)

  1. OldMan

    OldMan Power Member

    Boas!
    Estou a tentar fazer a validação de uma string que vem de uma textbox.
    Descobri agora as RegExp e ainda não consigo ver lógica nenhuma naquilo... mas parece-me que esta será a maneira mais fácil de fazer a validação da string (client side).

    O que precisava era de saber ao certo quais os caracteres que são permitidos nos mails para que a RegExp que usar seja coerente com isso.

    Já vi exemplos em Javascript que nem sequer deixam passar mails tipo [email protected] pelo facto de ter 2 "." depois do "@" e há mails assim.
    O que me interessava seria definir os caracteres possíveis de serem usados e depois verifico se a string tem mais algum que não era suposto lá estar.

    (se alguém quiser deixar um link para uma BOA explicação sobre como funcionam as regexp agradecia)


    Obrigado
     
  2. Lostctrl

    Lostctrl [email protected] Member

    o dominio de caracteres possiveis defines com parentesis rectos, algo do tipo [a-z0-9] em que dizes que só aceitas caracteres numéricos e alfanuméricos podes extender este conceito para outro tipo de caracteres do tipo [a-z0-9+_-]
    Neste site http://www.regular-expressions.info/ podes ver alguns exemplos sobre validação de emails e com a reference para regexps.
    Como normalmente uso expressões regulares em java o site que consulto é o http://java.sun.com/javase/6/docs/api/java/util/regex/Pattern.html e começo a brincar a partir daí. Normalmente no google consigo arranjar exemplos que poderão servir e esse do email em javascript deves ter montes de exemplos.
     
  3. anjo2

    anjo2 Power Member

    Não acho que devas ir por aí, através do que não pode lá estar...
    Uma das minhas versões para verificar mails é:
    Código:
    "/^[\_\-a-z0-9]*@[\_\-a-z0-9]*.(.*)$/"
    Não é a minha final, mas não está a funcionar muito mal, só que está a aceitar mais do que devia.
     
  4. cryteck

    cryteck Power Member

    Em php costumo fazer assim, utilizando a seguinte expressão regular:

    if (!ereg("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$", $_POST['email']))
    {
    echo = "E-mail Inválido";
    }


    Boa Sorte:P
    Abraços...
     
  5. Lostctrl

    Lostctrl [email protected] Member

    Parece-me que é mesmo isto :)
     
  6. OldMan

    OldMan Power Member

    @Lostctrl, de facto o que não falta são exemplos de validação de mails, mas a minha dúvida mantem-se *.
    [a-z0-9+_-] Aqui são aceites letras de "a" a "z", número de "0" a "9" e o caracteres "_" e "-"? O "+" faz parte da syntax ou também é aceite?

    @anjo2, o objectivo era definir os caracteres possíveis e depois verificar se o mail tem algum "intruso".

    @cryteck, eu olho para essa regexp e não vejo nada :rolleyes: Nem me posso considerar verde neste conceito, estou mesmo azul!
    Mas PHP não tem uma função já dedicada a regexp? Tinha ideia que sim.




    Não vou usar só a regexp para validar o mail, aliás até já tinha feito alguns "if" para validar essa string, como não poder ter 2 "@", não poder ter um "." imediatamente antes ou depois do "@", etc... Por isso a regexp era mesmo SÓ para me dizer se há caracteres que não deviam lá estar ($ % & / ? ...).

    * A questão é: onde é que posso saber que caracteres são possíveis nos mails? Já li em algum sitio um gajo a dizer que mails com "+" podem existir e pelo facto de nunca ter visto nenhum fico sem saber se heide permitir isso ou não.

    Obrigado a todos.
     
  7. anjo2

    anjo2 Power Member

    A-Z, a-z, -, _, 0-9, tem de começar com letra ou numero e depois do arroba igual.
    O filtro de mail do php dá também para redes internas o que valida também domínios impossíveis de existir na internet.
     
  8. OldMan

    OldMan Power Member

    [​IMG]

    @anjo2, estive a ler algumas coisas do link que o Lostctrl deixou e cheguei até isso que se vê na imagem, que é o que dizias no último post. (só tenho lá o "+" a mais :D)

    Isso de começar por letra/número confiro com javascript que é mais fácil para mim.


    Btw, esse filtro que falavas do php faz o que em concreto, sabes? Que tipo de domínios não podem existir?
    Tinha ideia que era como os mails. Para além de não se poder usar o "_" o resto seria igual.
     
    Última edição: 9 de Abril de 2009
  9. Lostctrl

    Lostctrl [email protected] Member



    OldMan, a expressão regular que o cryteck deixou é a que tu precisas, valida a estrutura, mas não valida o conteúdo (dominios válidos, etc...) isso é outra guerra.

    Basta acrescentares os caracteres que precisas aqui : ^[0-9a-z]([-_.AQUI]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$
    ou aqui ^[0-9a-zAQUI]([-_.]?[0-9a-z])*@[0-9a-zE AQUI IGUAL]([-.]?[0-9a-z])*\\.[a-z]{2,4}$

    No primeiro caso garantes que não termina com os caracteres definidos antes da arroba do tipo julio.@sapo.pt ou [email protected] no segundo aceita qualquer caracter antes da arroba e no inicio do email do tipo [email protected]
    Espero que me tenha feito explicar.

    Abraço
     
    Última edição: 9 de Abril de 2009
  10. Lostctrl

    Lostctrl [email protected] Member

    E cá está uma breve explicação da estrutura de um email address:

    by http://en.wikipedia.org/wiki/E-mail_address

    e respectivo RFC em http://tools.ietf.org/html/rfc5322#section-3.4.1

    Cumprs
     
  11. OldMan

    OldMan Power Member

    Characters ! # $ % & ' * + - / = ? ^ _ ` { | } ~
    Então pelo que citaste quer dizer que este caracteres são todos permitidos? :o
     
  12. Lostctrl

    Lostctrl [email protected] Member

    Para meu espanto, pelos vistos são caracteres válidos na primeira parte do email address(antes do @)
     
  13. OldMan

    OldMan Power Member

    Aquela expressão que o cryteck deixou em cima não está a apanhar nada:
    [​IMG]

    O que estou a fazer mal?
     
  14. Lostctrl

    Lostctrl [email protected] Member

    Tem uma barra a mais.

    testa esta: ^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,4}$
     
  15. OldMan

    OldMan Power Member

    "NA mesma!"


    EDIT: afinal parece estar a funcionar, esquece!
    Obrigado
     
    Última edição: 9 de Abril de 2009
  16. Lostctrl

    Lostctrl [email protected] Member

  17. OldMan

    OldMan Power Member

    Yap, editei agora o post anterior :)
     
  18. OldMan

    OldMan Power Member

    Ao que parece a expressão não funciona da mesma forma no programa Reggy e no Javascript.

    No reggy:
    [email protected] - fail
    [email protected] - win
    [email protected] - win
    [email protected] - win
    [email protected] - fail
    [email protected] - fail

    No javascript:
    [email protected] - fail
    [email protected] - win
    [email protected] - win
    [email protected] - win
    [email protected] - win
    [email protected] - win


    Está aqui a página em que estou a testar com javascript:
    http://dl.getdropbox.com/u/336918/test.html





    *EDIT
    antes tinha:
    Código:
    if (finalMail.match([U][B]"[/B][/U]^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,4}$[U][B]"[/B][/U])) {
    mudei para:
    Código:
    if (finalMail.match([U][B]/[/B][/U]^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,4}$[U][B]/[/B][/U])) {
     
    Última edição: 9 de Abril de 2009
  19. Lostctrl

    Lostctrl [email protected] Member

    Eu substitui por esta linha:

    if (finalMail.match("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$")) {

    e funcionou direito.
     

Partilhar esta Página