0

メールアドレスが有効かどうかを返すオラクル関数があります

CREATE OR REPLACE FUNCTION valid_email (p_email in varchar2)
                                      return string is
  v_return  varchar2(255);
  cemailregexp constant varchar2(1000) := '^[a-z0-9!#$%&''*+/=?^_`{|}~-]+(\.[a-z0-9!#$%&''*+/=?^_`{|}~-]+)*@([a-z0-9]([a-z0-9-]*[a-z0-9])?\.)+([A-Z]{2}|arpa|biz|com|info|intww|name|net|org|pro|aero|asia|cat|coop|edu|gov|jobs|mil|mobi|museum|pro|tel|travel|post)$';

BEGIN
  if regexp_like(p_email,cemailregexp,'i') then
     v_return := p_email;
  else
     v_return := null;
  end if;
  return v_return;

END;

電子メールが正規表現に合格した場合、電子メールを返します。それ以外の場合、返される結果は NULL です。

私が知りたいのは、入力文字列のどの部分が失敗したか、なぜ regex_like が失敗したのですか?

悪い場合は null だけを返すのではなく、おそらく新しい変数が理由です

mgptva;d@uclin2.berkeley.edu にメールを送りたい:

v_return_msg = "無効な文字 ';' 7位

これに対する私の試みが含まれていないことをお詫びします。どこから始めればよいかさえわかりません。グーグル検索は実りがありませんでした

4

1 に答える 1

1

正規表現は、一致するか一致しないかのいずれかです。それはあなたがそれらから得るすべてです。

電子メール アドレスは複雑で、正規表現で検証するのは非常に困難です。あなたのコア ビジネスがメール アドレス バリデーターの構築ではない場合は、ここで時間を無駄にするのではなく、先に進むことをお勧めします。

この記事「 Stop Validating Email Addresses With Regex」に非常に同意します。正規の電子メール検証は次のとおりです。

create or replace function is_valid_email(p_email in varchar2) return number is
begin
  return regexp_count(p_email, '^\S+@\S+\.\S+$');
end;

最先端の実装を見たい場合は、Perl のEmail::Validモジュールを確認してください。

于 2016-04-29T05:54:26.800 に答える