Problème regex pour adresse email
momop72
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonsoir,
J'ai un problème avec les expressions régulières j'essaie de mettre une contrainte pour accepter certaines adresses email ou non mais en vain.
J'aimerais que mes adresses comportent un @ et un . pour respecter le format suivant : ***@***
En suivant un tutoriel j'en suivi venu à faire ça :
Pattern.matches("*@*.*", email);
Ça parait simple et pourtant ça ne donne rien, en regardant des exemples sur le net j'ai vu des choses inutilement bien plus compliquées et je me suis tenté à faire ça :
Pattern.matches("^*+\\@*+\\.*+$", email)
Ce qui ne donne toujours rien... Quelqu'un pourrait m'expliquer ? Merci.
J'ai un problème avec les expressions régulières j'essaie de mettre une contrainte pour accepter certaines adresses email ou non mais en vain.
J'aimerais que mes adresses comportent un @ et un . pour respecter le format suivant : ***@***
En suivant un tutoriel j'en suivi venu à faire ça :
Pattern.matches("*@*.*", email);
Ça parait simple et pourtant ça ne donne rien, en regardant des exemples sur le net j'ai vu des choses inutilement bien plus compliquées et je me suis tenté à faire ça :
Pattern.matches("^*+\\@*+\\.*+$", email)
Ce qui ne donne toujours rien... Quelqu'un pourrait m'expliquer ? Merci.
A voir également:
- Regex adresse email
- Darkino nouvelle adresse - Guide
- Adresse mac - Guide
- Changer adresse dns - Guide
- Facebook piraté et adresse email changé - Guide
- Comment creer un compte email - Guide
4 réponses
"inutilement bien plus compliquées"
Pas tant que ça... et encore on est loin du compte.
En autorisant n'importe quel caractère tu te retrouves rapidement avec des aberrations comme
Pas tant que ça... et encore on est loin du compte.
En autorisant n'importe quel caractère tu te retrouves rapidement avec des aberrations comme
{µp@ <.#c'est loin d'être un email et pourtant ça respecte bien le format
***@***.***il y a donc beaucoup plus de contraintes à imposer.
C'est pour un travail scolaire, je veux donc juste une contrainte vérifiant le format ***@***echoseourien
Accessoirement ça me permettra de comprendre.
EDIT : La censure est un peu embêtante mais vous avez compris ce que je voulais.
Accessoirement ça me permettra de comprendre.
EDIT : La censure est un peu embêtante mais vous avez compris ce que je voulais.
L'astérisque est un opérateur de multiplicité qui signifie 0, 1 ou plusieurs fois, mais il doit être précédé de quelque chose, par exemple "n'importe quoi" qui est représenté par le point. Ainsi
Pour info : c'est la spécification officielle RFC 5322 qui définit le format des adresses mails, une expression régulière tout à fait correcte serait donc :
Même si en réalité 99.9% des adresses mails utilisées aujourd'hui matchent cette expression régulière simplifiée :
.*veut dire n'importe quoi 0, 1 ou plusieurs fois, perso ici je mettrais plutôt
.+qui signifie 1 ou plusieurs fois, ce qui oblige à avoir au moins un caractère avant et après l'arobase. Ce qui donne l'expression
.+@.+exemple :
public static void main(String[] args)
{
String regex = ".+@.+";
System.out.println("toto".matches(regex)); // false
System.out.println("toto@tata".matches(regex)); // true
}
Pour info : c'est la spécification officielle RFC 5322 qui définit le format des adresses mails, une expression régulière tout à fait correcte serait donc :
(?:[a-z0-9!#$%&'*+/=?^_'{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_'{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
Même si en réalité 99.9% des adresses mails utilisées aujourd'hui matchent cette expression régulière simplifiée :
[a-z0-9!#$%&'*+/=?^_'{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_'{|}~-]+)*@
(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
Ok je viens de tester et à priori ça marche, j'ai utiliser comme pattern :
".+@.+\\..+"
Qui me permet de tester si un "." est présent après l'"@"
Je te remercie pour tes explications claires et précises.
J'abuse peut être un peu mais tu pourrais me dire comment vérifier qu'une chaîne ne contient que des lettres ? J'ai essayé d'utiliser "\D" mais le compilateur refuse (bon je me doute un peu pourquoi en même temps), j'essaie "\\D" mais ça ne donne pas le résultat escompté...
EDIT : Non c'est bon j'ai trouvé c'est le pattern "[a-zA-Z]+", désolé.
Je te remercie beaucoup pour ton aide en tout cas, je ne sais pas combien de temps j'y aurais passé sans toi.
".+@.+\\..+"
Qui me permet de tester si un "." est présent après l'"@"
Je te remercie pour tes explications claires et précises.
J'abuse peut être un peu mais tu pourrais me dire comment vérifier qu'une chaîne ne contient que des lettres ? J'ai essayé d'utiliser "\D" mais le compilateur refuse (bon je me doute un peu pourquoi en même temps), j'essaie "\\D" mais ça ne donne pas le résultat escompté...
EDIT : Non c'est bon j'ai trouvé c'est le pattern "[a-zA-Z]+", désolé.
Je te remercie beaucoup pour ton aide en tout cas, je ne sais pas combien de temps j'y aurais passé sans toi.
Tu trouveras la syntaxe complète dans la documentation de la classe Pattern :
https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
\D c'est "tout sauf un chiffre" donc c'est normal que ça ne te donnes pas ce que tu veux...
https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
\D c'est "tout sauf un chiffre" donc c'est normal que ça ne te donnes pas ce que tu veux...