2009-04-24 13 views

答えて

1

あなたは、あなたがテーブルにフラットファイルフォーマットとインポートで取得し、その後に外部キー制約を適用することができます郵便番号のいくつかの源がある米国との唯一の心配している場合は、あなたのそのテーブルのアドレス。

電子メールアドレスは、フォーマットを検証するために正規表現(10g以上必要)と照合できますが、実際のアドレスであるかどうかを確認する作業ははるかに難しい作業です。

+0

おかげで、便利thatsの - 私はちょうどあなたの10グラムで結びつけるか、いくつかのOracleの情報に出くわしましたより高いreg式チェック・チップ - http://www.oracle.com/technology/oramag/webcolumns/2003/techarticles/rischert_regexp_pt2html –

+0

@oej上記のリンクは削除されました –

7

ここで引用符

'[a-zA-Z0-9._%-][email protected][a-zA-Z0-9._%-]+\.[a-zA-Z]{2,4}' 

だから、あなたはあなたのフィールドに有効な電子メールアドレスが含まれているかどうかをチェックするために)、where句またはREGEXP_SUBSTR(中REGEXP_LIKE()を使用することができるなど、電子メールアドレスの正規表現の構文は、です。ここでは、regexp_substr()が.domainのないアドレスにNULLを返し、部分文字列の検証に失敗することがわかります。そこからは、同じデータを使用してなど、

SQL> desc email 
Name          Null? Type 
----------------------------------------- -------- ---------------------------- 
EMAIL_ID           NUMBER 
EMAIL_ADDRESS          VARCHAR2(128) 


SQL> select * from email; 

    EMAIL_ID EMAIL_ADDRESS 
---------- ---------------------------------------- 
     1 [email protected] 
     2 [email protected] 
     3 [email protected] 
     4 [email protected]_domaindotorg 


SQL> @qry2 
SQL> column email_address format a40 
SQL> column substr_result format a30 
SQL> SELECT email_address 
    2  , regexp_substr(email_address,'[a-zA-Z0-9._%-][email protected][a-zA-Z0-9._%-]+\.[a-zA-Z]{2,4}') substr_result 
    3 FROM email 
    4/

EMAIL_ADDRESS       SUBSTR_RESULT 
---------------------------------------- ------------------------------ 
[email protected]       [email protected] 
[email protected]        [email protected] 
[email protected]      [email protected] 
[email protected]_domaindotorg 

をその周りにチェック制約を構築し、またはトリガ(不潔)を使用して、それを強制することができ、ここでREGEXP_LIKE

を使用して、唯一の有効な電子メールアドレスを制限クエリです
SQL> column email_address format a40 
SQL> column substr_result format a30 
SQL> SELECT email_address 
    2 FROM email 
    3 WHERE REGEXP_LIKE (email_address, '[a-zA-Z0-9._%-][email protected][a-zA-Z0-9._%-]+\.[a-zA-Z]{2,4}'); 

EMAIL_ADDRESS 
---------------------------------------- 
[email protected] 
[email protected] 
[email protected] 

SQL Referenceのコンテンツページでregexpの正規表現のサポートを確認してください。

+2

.museumと.travel TLDを使用する電子メールアドレスでは正規表現は機能しません。 –

+0

counsel @ Lawrence @ Andrea.comはこの正規表現を渡します。 –

4

より良い正規表現は次のとおりです。

^[a-zA-Z0-9._%-][email protected][a-zA-Z0-9._%-]+\.[a-zA-Z]{2,4}$ 

(同じ式が与えられたが、(^を開始するためにアンカー)と行の終わり($))test1の「のような、表現をアンカーなし

@ hotmail.comいくつかの他のテキスト ' が検証され、1つの電子メールを検証しようとしている場合 上記の文字列は検証されません

注:電子メールは、先頭または末尾のスペース が検証を失敗させないように、あらかじめトリムする必要があります。これはジョーカー(SQL構文のように*または%)である:

2

'.'文字に注意してください、それがお役に立てば幸いです。 あなたは'\'でそれを奪う必要があります。ここで

は私がRFC2822(そうでないかもしれないすべてのケースを:))と一致するために使用する正規表現です:

'^[a-zA-Z0-9!#$%''\*\+-/=\?^_`\{|\}~][email protected][a-zA-Z0-9._%-]+\.[a-zA-Z]{2,4}$' 
-1
declare 

-- where customer is the table in my case 

email_input customer.email%type; 

begin 

    email_input:=:EMAIL; 
    IF email_input is not null 
    AND email_input not like '%@%.COM' then 
     message('Please enter a valid email address!'); 
     message(' '); 
     clear_message; 
     :EMAIL:=null; 
     raise form_trigger_failure; 
    end if; 
end;