Bonjour,
Lors de la création d'une base, je dois créer un domaine incluant la vérification de la syntaxe d'une adresse mail.
Je pensais partir sur l'expression suivante, trouvée sur Internet :
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])')
J'ai donc la déclaration suivante pour la création du domaine, sous Postgresql 9.6 :
1 2 3 4
|
CREATE DOMAIN EMAIL_D
AS VARCHAR(255)
CONSTRAINT EMAIL_D_CK CHECK (VALUE IS NOT NULL AND VALUE = LOWER(VALUE) AND VALUE ~* '(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])'); |
Lors de l'exécution du script, PgAdmin renâcle et me renvoie une erreur de syntaxe.
Je pense que dois mettre quelques caractères d'échappement dans l'expression mais, pour le moment, tous mes essais ont été infructueux ; PgAdmin m'a systématiquement renvoyé une erreur de syntaxe.
Là, je sèche un peu...
Pouvez-vous m'aider ?
Deux remarques :
- Je ne souhaite pas déléguer la validation syntaxique au programme d'accès à la base. Une base de données doit se suffire à elle-même et assurer la cohérence des données sans qu'il ne soit nécessaire de faire appel à une bibliothèque tierce. En plus, les SGBDR comme Postgresql sont capables de le faire.
- Je pourrai réduire l'expression mais j'ai peur qu'une expression trop simpliste laisse passer des exceptions.
Vincent
Partager