Vérification e-mail avec regexp

Fermé
YameFAZE Messages postés 201 Date d'inscription mardi 24 avril 2012 Statut Membre Dernière intervention 14 mars 2021 - 17 mars 2017 à 01:42
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 - 24 mars 2017 à 22:24
Bonjour,

Dans ma page de login j'ai voulu créer un regexp un peu plus complet pour vérifier les adresses e-mail mais il semblerait qu'Android Studio n'aime pas beaucoup.

Pattern p = Pattern.compile("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$");


Le problème semble venir de ce contre slash
+\.
.
A voir également:

4 réponses

BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 3 894
17 mars 2017 à 09:03
Hello,

Quand on parle de RegEx, je pense toujours à ça:
https://www.commitstrip.com/fr/2014/02/24/coder-on-the-verge-of-extinction/

Dans ton cas, si tu n'es pas obligé d'utiliser les RegEx, pourquoi ne pas utiliser une lib qui te permet de valider ton formulaire?
J'utilise android-saripaar qui est plutôt pas mal et qui utilise des annotations
0
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 928
17 mars 2017 à 13:48
Merde ils ont trouvé ma cabane!
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 3 894 > Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024
17 mars 2017 à 13:57
LOL!
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 24 mars 2017 à 14:29
pour l'apprentissage et la mise au point de Regexp compatibles Perl ce petit programme est une merveille (sous Windows) :

http://www.weitz.de/regex-coach/

pour la regexp, comme indiqué par Whismeril, Java nécessitera deux antislashs pour le point.

sinon, ta regexp ne matche pas en regexp compatible Perl, à moins de la rendre insensible à la casse, ou que tes adresses soient déjà toutes en majuscules par un traitement préalable.

En Java, cela doit donner (non testé) :

Pattern p = Pattern.compile("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$", Pattern.CASE_INSENSITIVE);

C'est une vérification simple, mais qui ne validera pas forcément tous les e-mails, ou domaines. Par exemple, les adresses en
.paris
ne passeront pas ton filtre, car il impose des domaines de premier niveau entre 2 et 4 lettres. Pour permettre des domaines de deux lettres ou plus, cela serait :

Pattern p = Pattern.compile("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}$", Pattern.CASE_INSENSITIVE);

Une regexp Perl conforme à la RFC 822 peut devenir plus complexe que cela (pour un exemple généré automatiquement, voir ce lien - sur la base du module Perl Mail::RFC822::Address).

Par exemple
"toto"@example.com
est une adresse valide selon la RFC, etc. et pour prendre en compte tous les cas, faire usage d'une bibliothèque (à condition qu'elle soit bien faite) a du sens.


Dal
0
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 928 > [Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024
24 mars 2017 à 22:24
Bonsoir

j'utilise souvent ce site
http://regexstorm.net/

Dans la page référence il y a toutes (ou presque) les syntaxes possibles avec un exemple pour chacune.
Et il y a un testeur.

Il existe de nombreux autres sites.
0
YameFAZE Messages postés 201 Date d'inscription mardi 24 avril 2012 Statut Membre Dernière intervention 14 mars 2021
17 mars 2017 à 11:32
Merci pour ta réponse. Effectivement cela semble pas mal mais comme d'habitude, c'est en anglais, pour les instructions de programmation ça va mais dès qu'il s'agit de texte... aurais-tu la patiente de m'expliquer comment adapter cela à mon code stp ?
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 3 894
17 mars 2017 à 11:45
mais comme d'habitude, c'est en anglais,
Dans le monde du développement logiciel, il faut s'habituer à l'anglais...
Les exemples de code sont pourtant clair je pense.

Etape 1: tu utilises les annotations que tu veux. Dans ton cas, le 1er exemple me parait bien
Etape 2: Tu instancies un Validator dans le onCreate() (attention à bien déclarer la variable en tant que membre dans l'Activity
Etape 3: ton Activity doit implémenter l'interface ValidationListener. N'oublies pas de surcharger les 2 méthodes indiquées
Etape 4: je pense que tu as compris quoi faire ;)

Et pour l'intégrer dans ton Gradle:
compile 'com.mobsandgeeks:android-saripaar:2.0.3'

0
YameFAZE Messages postés 201 Date d'inscription mardi 24 avril 2012 Statut Membre Dernière intervention 14 mars 2021
17 mars 2017 à 12:29
Bon, je vais me pencher là-dessus, merci.
0
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 928
17 mars 2017 à 16:30
Bonjour

Si en Android studio (Java je suppose) le \ est le caractère d'échappement dans les string, comme pour la regex, alors il faut l'échapper 2 fois, une fois pour la string et la seconde pour la regex.

"\\."
va charger "\." dans la variable, alors que
"\."
va essayer d'échapper le . pour la variable, avant même de la passer à la regex.

En C# on peut s'affranchir de ce problème, en mettant un @ avant la string
@"\."
//est équivalent à 
"\\."

Je ne sais pas si c'est pareil en java
0