Problème regex pour adresse email
Fermé
momop72
-
6 oct. 2013 à 22:22
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 6 oct. 2013 à 23:18
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 6 oct. 2013 à 23:18
A voir également:
- Regex adresse email
- Rechercher ou entrer l'adresse - Guide
- Darkino nouvelle adresse - Guide
- Darkino : le grand site pirate change d'adresse et d'interface - Accueil - Services en ligne
- Adresse mac - Guide
- Créer une adresse hotmail - Guide
4 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
6 oct. 2013 à 22:37
6 oct. 2013 à 22:37
"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.
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
6 oct. 2013 à 22:56
6 oct. 2013 à 22:56
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.
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
6 oct. 2013 à 23:18
6 oct. 2013 à 23:18
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...