2017-05-11 1 views
1

J'ai cherché partout une contrainte correcte et logique CHECK pour valider qu'un e-mail est dans le bon format. Jusqu'à présent, je l'ai trouvé vraiment long et expressions comme inutiles:Vérification de la contrainte pour les e-mails dans une base de données Oracle

create table t (
email varchar2(320) check (
regexp_like(email, '[[:alnum:]][email protected][[:alnum:]]+\.[[:alnum:]]') 
) 
); 

et

create table stk_t (
email varchar2(320) check (
email LIKE '%@%.%' AND email NOT LIKE '@%' AND email NOT LIKE '%@%@%' 
) 
); 

Il y a sûrement un moyen plus simple? J'utilise la base de données Oracle 11g et SQL Developer IDE. C'est ce que j'ai:

constraint Emails_Check check (Emails LIKE '%[email protected]%_._%') 

Quelqu'un peut-il s'il vous plaît laissez-moi savoir si cela est la façon la plus efficace de validation des e-mails?

+5

'très long et inutile expressions' plus par regexes email sont _beaucoup_ plus longues et plus compliquées que cela. Jetez un oeil [ici] (http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address) pour commencer à réfléchir à ce sujet. –

+0

Je ne vois rien de "superflu" dans ces expressions. Bien au contraire: la partie locale ne doit contenir aucun '@'; un domaine de premier niveau doit comporter au moins deux lettres; etc. Vous allez vous retrouver avec un regexp_like plus complexe. Peut-être préféreriez-vous un déclencheur au lieu d'une contrainte, vous pouvez donc utiliser PL/SQL pour vérifier la chaîne et déclencher une exception si elle ne confirme pas les règles pour une adresse e-mail. –

+0

Votre contrainte de vérification considère '@@ ...' une adresse e-mail valide, ce qui n'est évidemment pas le cas. –

Répondre

1

Vous pouvez essayer cette

email varchar2(255) check (
email LIKE '%@%.%' AND email NOT LIKE '@%' AND email NOT LIKE '%@%@%' ) 
+1

Bienvenue dans Stack Overflow! Avant de répondre à une question, lisez toujours les réponses existantes. Cette réponse a déjà été fournie. En fait, le PO cherche une solution plus simple. Quelques directives pour écrire de bonnes réponses peuvent être trouvées [ici] (https://stackoverflow.com/help/how-to-answer). – dferenc