2017-05-11 11 views
1

私はまともで論理的なCHECKという制約を探して、電子メールが正しい形式であることを検証しました。以下のようなこれまでのところ私が見つけた本当に長いと、不要な表現:Oracleデータベース内の電子メールの制約を確認してください

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

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

確かに簡単な方法がありますか? Oracle 11gデータベースとSQL Developer IDEを使用しています。 は、これは私が持っているものです。

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

誰かが、これは電子メールを検証する最も効率的な方法であるなら、私に教えてくださいことはできますか?

+5

'本当に長いと、不要なexpressions'を試すことができますが、これよりももっと複雑_much_長くなっていると。これについて考え始めるには、[こちら](http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-anemail-address)を見てください。 –

+0

私はこれらの表現に「不要」というものは何も見当たりません。実際には正反対です:ローカル部分には「@」は含まれてはいけません。最上位ドメインは少なくとも2文字で構成されていなければなりません。あなたはより複雑なregexp_likeで終わるでしょう。 PL/SQLを使用して文字列をチェックし、電子メール・アドレスのルールを確認しない場合に例外を発生させるために、制約の代わりにトリガーを使用することをお勧めします。 –

+0

あなたのチェック制約は '@@ ...'が明らかに有効ではない有効な電子メールアドレスであるとみなします。 –

答えて

1

あなたは電子メールの正規表現を通じて最もこの

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

ようこそスタックオーバーフロー!質問に答える前に、常に既存の回答を読んでください。この回答は既に提供されています。実際、OPはもっと簡単な解決策を模索しています。良い回答を書くためのいくつかのガイドラインは、[here](https://stackoverflow.com/help/how-to-answer)で見つけることができます。 – dferenc

関連する問題