次のようなアドバイスをいただければ幸いです。 - OracleのSQLでは、何らかの種類のチェック制約により電子メールと郵便番号のフィールドを検証できますか?または私は疑問があるこのようなものpl/sql正規表現で?sql/oracleの電子メール/郵便番号フィールドの検証
おかげ
次のようなアドバイスをいただければ幸いです。 - OracleのSQLでは、何らかの種類のチェック制約により電子メールと郵便番号のフィールドを検証できますか?または私は疑問があるこのようなものpl/sql正規表現で?sql/oracleの電子メール/郵便番号フィールドの検証
おかげ
あなたは、あなたがテーブルにフラットファイルフォーマットとインポートで取得し、その後に外部キー制約を適用することができます郵便番号のいくつかの源がある米国との唯一の心配している場合は、あなたのそのテーブルのアドレス。
電子メールアドレスは、フォーマットを検証するために正規表現(10g以上必要)と照合できますが、実際のアドレスであるかどうかを確認する作業ははるかに難しい作業です。
ここで引用符
'[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の正規表現のサポートを確認してください。
.museumと.travel TLDを使用する電子メールアドレスでは正規表現は機能しません。 –
counsel @ Lawrence @ Andrea.comはこの正規表現を渡します。 –
より良い正規表現は次のとおりです。
^[a-zA-Z0-9._%-][email protected][a-zA-Z0-9._%-]+\.[a-zA-Z]{2,4}$
(同じ式が与えられたが、(^
を開始するためにアンカー)と行の終わり($
))test1の「のような、表現をアンカーなし
@ hotmail.comいくつかの他のテキスト ' が検証され、1つの電子メールを検証しようとしている場合 上記の文字列は検証されません
注:電子メールは、先頭または末尾のスペース が検証を失敗させないように、あらかじめトリムする必要があります。これはジョーカー(SQL構文のように*
または%
)である:
は
が'.'
文字に注意してください、それがお役に立てば幸いです。 あなたは'\'
でそれを奪う必要があります。ここで
は私がRFC2822(そうでないかもしれないすべてのケースを:))と一致するために使用する正規表現です:
'^[a-zA-Z0-9!#$%''\*\+-/=\?^_`\{|\}~][email protected][a-zA-Z0-9._%-]+\.[a-zA-Z]{2,4}$'
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;
おかげで、便利thatsの - 私はちょうどあなたの10グラムで結びつけるか、いくつかのOracleの情報に出くわしましたより高いreg式チェック・チップ - http://www.oracle.com/technology/oramag/webcolumns/2003/techarticles/rischert_regexp_pt2html –
@oej上記のリンクは削除されました –