Face à la quantité toujours croissante d'informations échangées sur Internet, les bases de données sont constamment exposées à l'insertion de données erronées ou incomplètes. Parmi les validations les plus importantes à effectuer figure celle des noms de domaine et de leurs extensions. Une adresse comportant une extension inexistante ou mal orthographiée peut rapidement entraîner des erreurs de communication, des échecs d'envoi de courriels ou encore des problèmes d'accès à des services en ligne. Il devient donc essentiel de vérifier qu'une extension de domaine appartient bien à une liste reconnue avant d'accepter ou d'enregistrer une information dans un système informatique.
Cette vérification est particulièrement fréquente dans les formulaires Web, les applications de gestion de clients, les systèmes d'authentification ainsi que les logiciels de messagerie électronique. Lorsqu'un utilisateur saisit une adresse de courriel ou un nom de domaine, il est souvent préférable d'effectuer un premier contrôle syntaxique avant même de tenter une connexion réseau. Cette étape permet de détecter rapidement les erreurs de frappe les plus courantes et d'améliorer considérablement la qualité des données conservées dans les bases de données.
L'une des méthodes les plus simples consiste à comparer l'extension saisie avec une liste prédéfinie d'extensions de domaines valides. Cette liste peut contenir les domaines génériques les plus populaires, tels que .com, .org ou .net, mais également des extensions nationales comme .ca, .fr, .uk ou encore plusieurs sous-domaines régionaux. Bien que cette approche nécessite de maintenir une table de référence à jour, elle demeure rapide, efficace et parfaitement adaptée à de nombreuses applications où une validation préliminaire est suffisante.
L'exemple Delphi présenté ci-dessous illustre précisément cette technique. Une fonction parcourt une importante table contenant plusieurs centaines d'extensions reconnues et vérifie si la chaîne fournie se termine par l'une d'entre elles. Si une correspondance est trouvée, le domaine est considéré comme valide; dans le cas contraire, il est rejeté. Cette méthode permet ainsi de contrôler efficacement les noms de domaine et les adresses de courriel avant leur traitement, tout en offrant une solution simple à comprendre et facile à intégrer dans des projets Delphi, Kylix ou Lazarus :
- Program IsExtDomainValidSource;
-
- {$APPTYPE CONSOLE}
-
- Uses SysUtils;
-
- Function IsExtDomainValid(DomainName:String):Boolean;
- Const ListExt: Array[0..256] of PChar=(
- '.ab.ca','.ac','.ad','.ae','.aero','.af','.ag','.ai','.al','.am','.an','.ao','.aq','.ar','.as','.at','.au','.aw','.az',
- '.ba','.bb','.bc.ca','.bd','.be','.bf','.bg','.bh','.bi','.biz','.bj','.bj','.bm','.bn','.bo','.br','.bs','.bt','.bv','.bw','.by','.bz',
- '.ca','.cat','.cc','.cd','.cf','.cg','.ch','.ci','.ck','.cl','.cm','.cn','.co','.co.me','.com','.coop','.cr','.cu','.cv','.cx','.cy','.cz',
- '.de','.dj','.dk','.dm','.do','.dz',
- '.ec','.edu','.ee','.eg','.eh','.er','.es','.et',
- '.fi','.fj','.fk','.fm','.fo','.fr','.fx',
- '.ga','.gb','.gc.ca','.gd','.ge','.gf','.gg','.gh','.gi','.gl','.gm','.gn','.gov','.gov.me','.gp','.gq','.gr','.gs','.gt','.gu','.gw','.gy',
- '.hk','.hm','.hn','.hr',
- '.info','.int',
- '.jobs',
- '.kw','.ky','.kz',
- '.la','.lb','.lc','.li','.lk','.lr','.ls','.lt','.lu','.lv','.ly',
- '.ma','.mb.ca','.mc','.md','.me','.mg','.mh','.mk','.ml','.mm','.mn','.mo','.mobi','.mp','.mq','.mr','.ms','.mt','.mu','.museum','.mv','.mw','.mx','.my','.mz',
- '.na','.name','.nb.ca','.nc','.ne','.net','.nf','.ng','.ni','.nl','.nl.ca','.no','.np','.nr','.ns.ca','.nt.ca','.nu','.nu.ca','.nz',
- '.om','.on.ca','.org',
- '.pa','.pe','.pe.ca','.pf','.pg','.ph','.pk','.pl','.pm','.pn','.pr','.pro','.ps','.pt','.pw','.py',
- '.qa','.qc.ca',
- '.re','.ro','.ru','.rw',
- '.sa','.sb','.sc','.sd','.se','.sg','.sh','.si','.sj','.sk','.sk.ca','.sl','.sm','.sn','.so','.sr','.st','.sv','.sy','.sz',
- '.tc','.td','.tel','.tf','.tg','.th','.tj','.tk','.tm','.tn','.to','.tp','.tr','.travel','.tt','.tv','.tw','.tz',
- '.ua','.ug','.uk','.um','.us','.uy','.uz',
- '.va','.vc','.ve','.vg','.vi','.vn','.vu',
- '.wf','.ws',
- '.ye',
- '.yk.ca','.yt','.yu',
- '.za','.zm','.zw'
- );
- Var
- I:Integer;
- Begin
- IsExtDomainValid := False;
- If('' = DomainName)Then Exit;
- For I := 0 to High(ListExt) do Begin
- If(StrPas(ListExt[I]) = Copy(DomainName,Length(DomainName)-StrLen(ListExt[I])+1,StrLen(ListExt[I])))Then Begin
- IsExtDomainValid := True;
- End;
- End;
- End;
-
- BEGIN
- WriteLn('domain.ext = ',IsExtDomainValid('domain.ext'));
- WriteLn('domain.ca = ',IsExtDomainValid('domain.ca'));
- WriteLn('moncourriel@gladir.com = ',IsExtDomainValid('moncourriel@gladir.com'));
- WriteLn('moncourriel@gladir.com.dev = ',IsExtDomainValid('moncourriel@gladir.com.dev'));
- END.
on obtiendra le résultat suivant :
domain.ext = FALSEdomain.ca = TRUE
moncourriel@gladir.com = TRUE
moncourriel@gladir.com.dev = FALSE