URL: https://linuxfr.org/forums/programmationweb/posts/filtrage-d-une-adresse-electronique Title: Filtrage d'une adresse électronique Authors: plouc Date: 2021年12月09日T10:58:52+01:00 License: CC By-SA Tags: rfc, filtrage et courriel Score: 3 Bonjour, Avec une expression rationnelle (régulière ?), je cherche à filtrer un tant soit peu des adresses électroniques saisies dans un formulaire. Pour l'instant, je me base sur les RFC 5321 sections 4.1.2 and 4.1.3 + Errata : ``` email address = local-part@domain ou local-part@address-literal local-part = (?:[a-zA-Z0-9!#$%&'*+\-/=?^_\x60{|}~]+(?:\.[a-zA-Z0-9!#$%&'*+\-/=?^_\x60{|}~]+)*)|(?:"[\x20-\x21\x23-\x5B\x5D-\x7E]*")|(?:"(?:\\[\x20-\x7E])*") domain = (?:[A-Za-z0-9](?:[A-Za-z0-9\-]*[A-Za-z0-9])?(?:\.[A-Za-z0-9](?:[A-Za-z0-9\-]*[A-Za-z0-9])?)*(?:\.)?) ``` Pour address-literal, ça devient folklorique, j'ai laissé tomber après avoir tenté un truc pourri du style : ``` (?:\[([0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-5][0-5]))(?:\.([0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-5][0-5]))){3}\])|(?:\[IPv6:[0-9A-F]{1,4}(?::[0-9A-F]{1,4}){7}\])|(?:\[IPv6:(?:[0-9A-F]{1,4}(?::[0-9A-F]{1,4}){0,5})?::(?:[0-9A-F]{1,4}(?::[0-9A-F]{1,4}){0,5})?\])|(?:\[IPv6:[0-9A-F]{1,4}(?::[0-9A-F]{1,4}){5}:([0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-5][0-5]))(?:\.([0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-5][0-5]))){3}\])|(?:\[IPv6:(?:[0-9A-F]{1,4}(?::[0-9A-F]{1,4}){0,3})?::(?:[0-9A-F]{1,4}(?::[0-9A-F]{1,4}){0,3}:)?([0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-5][0-5]))(?:\.([0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-5][0-5]))){3}\])|(?:\[[A-Za-z0-9\-]*[A-Za-z0-9]:[\x21-\x5A\x5E-\x7E]+\]) ``` Donc si je me cantonne à local-part@domain, ça donne : ``` /^((?:[a-zA-Z0-9!#$%&'*+\-/=?^_\x60{|}~]+(?:\.[a-zA-Z0-9!#$%&'*+\-/=?^_\x60{|}~]+)*)|(?:"[\x20-\x21\x23-\x5B\x5D-\x7E]*")|(?:"(?:\\[\x20-\x7E])*"))@(?:[A-Za-z0-9](?:[A-Za-z0-9\-]*[A-Za-z0-9])?(?:\.[A-Za-z0-9](?:[A-Za-z0-9\-]*[A-Za-z0-9])?)*(?:\.)?)$/ ``` Je n'ai pas trouvé de règles précises sur les longueurs limites, plusieurs RFC hésitent entre 63 et 64 octets pour local-part (RFC 5321 section 4.5.3.1), entre 254 et 255 octets pour le domaine. Pour la longueur totale, c'est flou Afflelou. Si quelqu'un connaît la/les bonnes RFC récentes... L'autre souci souci, c'est l'internationalisation, avec les RFC 5891 et suivantes, 6530 et suivantes. En gros, on peut écrire à pelé@exemple.com, δοκιμή@παράδειγμα.δοκιμή, 我買@屋企.香港, 二ノ宮@黒川.日本, медведь@с-балалайкой.рф, संपर्क@डाटामेल.भारत (et il y a aussi les langues qui s'écrivent de droite à gauche). Comment implémenter cela ?

AltStyle によって変換されたページ (->オリジナル) /