Vérification e-mail avec regexp

YameFAZE Messages postés 201 Date d'inscription   Statut Membre Dernière intervention   -  
 Utilisateur anonyme -
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 15952 Date d'inscription   Statut Modérateur Dernière intervention   3 918
 
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
Utilisateur anonyme
 
Merde ils ont trouvé ma cabane!
0
BunoCS Messages postés 15952 Date d'inscription   Statut Modérateur Dernière intervention   3 918 > Utilisateur anonyme
 
LOL!
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
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
Utilisateur anonyme > [Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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 15952 Date d'inscription   Statut Modérateur Dernière intervention   3 918
 
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   Statut Membre Dernière intervention  
 
Bon, je vais me pencher là-dessus, merci.
0
Utilisateur anonyme
 
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