Home

Validation syntaxique

Les développeurs utilisent la plupart du temps une de ces façons pour valider une adresse email

- Présence du @ et du . --> très permissif
- Une regex standard trouvée sur le web --> en général assez bon mais pas à jour, soit trop contraignant, soit trop laxiste

Limites :

- Il n'est pas possible d'être compatible avec toutes les RFC 2822 et RFC 5322 avec une seule Regex car il y a des conflits entre elles.
- Chaque ISP a ses propres règles,
- Jusqu'à 2013, il y avait 280 TLD, actuellement on sera bientôt à 1300 (.brussels, ...)
- L'internationnalisation (.中國, الجزائر.) albert.leroy@mapetitesociété.brussels.
- Aucune correction d'erreur

L'approche choisie est celle pragmatique (plutôt que de suivre les règles théoriques des RFC à la perfection)

Pour les domaines où la syntaxe est connue :
Regex spécifique par FAI. Suivons ce que font les FAI car ils sont souvent plus restrictifs que les normes. Nous avons déjà la syntaxe exacte du username pour
aol, gmail, google, hotmail (live, msn), mac (icloud, me), yahoo

Pour les domaines où la syntaxe est inconnue :
Réaliser un test via 2 regex, l'une tolérante, l'autre restrictive. (lenient/strict)

En mode batch, 3 statuts : adresse correcte, incorrecte et suspicieuse (indéterminée)

Must read

If domain.TLD = is present domain_regex_map.csv

Si domain.tld est présent dans le fichier domain_regex_map.csv, utiliser la regex spécifique

Ce fichier fait le mapping pour tout les domaines de Microsoft, Yahoo, Gmail, ...

Exemple  
Domains Regex à utiliser
hotmail.de hotmail
msn.de hotmail
live.de hotmail
outlook.de hotmail
windowslive.de, hotmail

Correction des erreurs dans usernames

Yahoo n'accepte que le underscore --> si hyphen, le remplacer par un underscore
Hotmail accepte underscore et hyphen --> Si espace, le remplacer par hyphen et underscore
Gmail n'accepte ni hyphen ni underscore --> si hyphen ou underscore, les retirer

--> Faire tes propositions de corrections d'erreurs

If TLD = official ICAN TLD

Vérifiez que le TLD est repris dans la liste officielle des TLD de l'Iana (liste en augmentation régulière en ce moment)
Téléchargement régulier du fichier car il y a beaucoup de nouveaux noms en ce moment
Conserver une copie en cache si download ne fonctionne pas
Si TLD pas présent dans cette liste, alors recherche de correction d'erreur si possible OU "Invalid Top Level Domain"

If domain = Domain Name Regex Compliant

Regex pour valider un nom de domaine

(?=^.{1,254}$)(^(?:(?!\d+\.)[a-zA-Z0-9_\-]{1,63}\.?)+(?:[a-zA-Z]{2,})$) --> attention à la partie TLD, on fait déjà un check avant, donc à supprimer dans la regex???)

Si pas valide proposer aide à la correction d'erreur

-google-.com OU _google_ --> google.com
-google.com OU _
google.com --> google.com
go--ogle.com go__ogle.com --> go-ogle.com

--> Faire tes propositions de corrections d'erreurs

Analyses sur le username pour les domaines non présent dans domaine_regex_map.csv

utiliser user_name_regexp.csv

Laxist/Lenient Regex

joe@home Lenient Is NOT Valid adresse incorrecte
joe@home Strict Is NOT Valid
a@b.c Lenient Is Valid Suspicieux
a@b.c Strict Is NOT Valid
joe@home.com Lenient Is Valid adresse correcte
joe@home.com Strict Is Valid

Correction des erreurs

Prendre en compte : common_tld_typo.csv + common_isp_typo.csv
Correction globale : Remplacer #,é,&,@@, par @, retirer les espaces , ; avant et après

La correction doit-elle intervenir tout au début d ela validation ???

 

Official ISP REGEX
Gmail must be between 6-30 characters
must start with letter or number
must end with letter or number
must use letters, numbers, or dots (.)
all dots (.) are ignored
case is ignored
plus (+) is allowed, everything after + is ignored 1.
All characters prefixing the plus symbol (+) and stripping all dot symbol (.)
must be between 6-30 characters.
Yahoo 4-32 characters
must start with letter
must end with letter or number
must use letters, numbers, underscores (_)
only one dot (.) allowed no consecutive dot (.) or underscore (_)
no dot-underscore (._) or underscore-dot (_.)
case is ignored
tags not supported
Hotmail (Live, MSN) 1-64 characters
must start with letter
must end with letter, number, hyphen (-), or underscore (_)
must use letters, numbers, periods (.), hypens (-), or underscores (_)
only one plus (+) is allowed
case is ignored
AOL 3-32 characters
must start with letter
must end with letter or number
must use letters, numbers, dot (.) or underscores (_)
no consecutive dot (.) or underscores (_)
no dot-underscore (._) or underscore-dot (_.)
case is ignored
Google Apps must be between 1-64 characters
must use letters, numbers, dash (-), underscore (_), apostrophes ('), and dots (.)
if one character, must be alphanum, underscore (_) or apostrophes (') otherwise must start with: alphanum, underscore (_), dash (-), or apostrophes(') otherwise must end with: alphanum, underscore(_), dash(-), or apostrophes(')
plus (+) is allowed, everything after + is ignored
case is ignored
Imac (icloud, ...) 3-20 characters
must start with letter
must end with letter or number
must use letters, numbers, dot (.) or underscores (_)
no consecutive dot (.) or underscores (_) case is ignored
any number of plus (+) are allowed if followed by at least one alphanum
   
??? Other ISP regex are welcomed !
   

En mode batch = correction automatique sur base de dictionary
En mode API, demande à l'utilisateur en lui proposant une solution (Did you mean? suggestion@domain.com)

(A oublier pour l'autocorrection car faux positif : Levenstein distance , Ratcliff-Obershelp algorithm , http://norvig.com/spell-correct.html)