Forum Programmation.web Filtrage d'une adresse électronique

Posté par  . Licence CC By‑SA.
Étiquettes :
3
9
déc.
2021

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 (…)