Comment contrôler le format de saisie d'une adresse mail? Vérifier qu'elle respecte bien toto@toto.com
Merci
Comment contrôler le format de saisie d'une adresse mail? Vérifier qu'elle respecte bien toto@toto.com
Merci
Regardes du côtés des expressions régulières: Librairie regexp.
Zl.
je voulais tester EmailValidator mais ca a pas l'air de fonctionner
Comme zl l'a dit, tu peux utiliser les expressions régulières, c'est à mon avis ce qu'il y a de plus simple :
Pas testé mais ça devrait marcher.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 import java.util.regex.*; ... String masque = "^[a-zA-Z]+[a-zA-Z0-9\\._-]*[a-zA-Z0-9]@[a-zA-Z]+" + "[a-zA-Z0-9\\._-]*[a-zA-Z0-9]+\\.[a-zA-Z]{2,4}$"; Pattern pattern = Pattern.compile(masque); Matcher controler = pattern.matcher(laSaisieDeLutilisateur); if (controler.matches()){ //Ok : la saisie est bonne }else{ //La c'est pas bon }
Explication du masque :
^ : début de la ligne
[a-zA-Z]+ : une lettre (au moins une)
[a-zA-Z0-9\\._-]* : une lettre ou un chiffre ou un "." ou un "_" ou un "-" autant de fois que l'on veut (0 à n)
[a-zA-Z0-9]+ : une lettre ou un chiffre (au moins 1)
@ : le symbole @ (obligatoire)
[a-zA-Z]+ : une lettre (au moins une)
[a-zA-Z0-9\\._-]* : une lettre ou un chiffre ou un "." ou un "_" ou un "-" autant de fois que l'on veut (0 à n)
[a-zA-Z0-9]+ : une lettre ou un chiffre (au moins 1)
\\. : un "." (obligatoire)
[a-zA-Z]{2,4} : de 2 à 4 lettres
$ : fin de ligne
Salut,
juste une petite remarque par rapport au pattern précédent: Une addresse email peut commencer par un "." par exemple... donc ton expression risque de refuser des adresses valides.
De mon coté je propose ce code (un peu plus laxiste surement):
De toute façon, la seule solution pour vérifier si une adresse email est valide (et existe) est d'envoyer un email et voir si ca plante ou pas, ce qui n'est pas terrible (Si je me trompes je serais ravi de l'apprendre, dc n'hésitez pas!).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public static boolean isValid(String email) { if( email!=null && email.trim().length()>0 ) return email.matches("^[a-zA-Z0-9\\.\\-\\_]+@([a-zA-Z0-9\\-\\_\\.]+\\.)+([a-zA-Z]{2,4})$"); return false; }
+
T'es sur?Envoyé par manube
![]()
Enfin bon, il est vrai qu'on peut écrire l'expression de plusieurs manières.
Edit :
Extrait de la RFC 822, document du W3C qui définit les spécifications des emails :
Selon cette grammaire : moi je comprend qu'une adresse ne peut pas commencer par un point.6. Address Specification
6.1. Syntax
address = mailbox ; one addressee
/ group ; named list
group = phrase ":" [#mailbox] ";"
mailbox = addr-spec ; simple address
/ phrase route-addr ; name & addr-spec
route-addr = "<" [route] addr-spec ">"
route = 1#("@" domain) ":" ; path-relative
addr-spec = local-part "@" domain ; global address
local-part = word *("." word) ; uninterpreted
; case-preserved
domain = sub-domain *("." sub-domain)
sub-domain = domain-ref / domain-literal
domain-ref = atom ; symbolic reference
specials = "(" / ")" / "<" / ">" / "@" ; Must be in quoted-
/ "," / ";" / ":" / "\" / <"> ; string, to use
/ "." / "[" / "]" ; within a word.
atom = 1*<any CHAR except specials, SPACE and CTLs>
quoted-string = <"> *(qtext/quoted-pair) <">; Regular qtext or
; quoted chars.
qtext = <any CHAR excepting <">, ; => may be folded
"\" & CR, and including
linear-white-space>
quoted-pair = "\" CHAR ; may quote any char
word = atom / quoted-string
Désolé, pourtant il me semblait avoir déjà vu ca qque part (je vais essayer de la retrouver pour voir si j'ai halluciné ou pas).
Merci pour ces précisions.
Et je pense par contre qu'une adresse du genre
test@sub.domain.com est correcte
Hikage
SCJP / SCWCD & SCWSJD Certified / Spring Framework Certified
[Personal Web] [CV]
F.A.Q Spring Framework - Participez !
Oui elle est correcte, et elle est reconnu comme telle par le pattern que j'ai mis.Envoyé par Hikage
salut, oui les points en debut d'adresse sont bien valide.
La rfc 822 est obsolete.
aujourd'hui il peut meme y avoir des espace dans les adresse mail.
voici quelques liens:
la rfc822: ftp://ftp.rfc-editor.org/in-notes/rfc3696.txt
et l'erratum: http://www.rfc-editor.org/cgi-bin/er...ch.pl?rfc=3696
Je suis a la recherche de l'expression réguliere qui marchera tout le temps.
Et a mon avis comme beaucoup d'entre nous.
Partager