私はオラクルの電子メールアドレスが有効であるかどうかを返す関数または電子メールが正規表現に合格した場合ではないオラクルRegex_like機能は:それ以外の場合は、戻り結果が、それは電子メールを返し、
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が失敗したのかです。 [email protected]は返すために、代わりに悪い場合は、単にnullを再調整のため、多分理由
のための新たな変数iが電子メールmgptvaを希望
:
v_return_msg =「無効な文字 ';' 7位
で、私はこれに向けて、私の試みを含んでいないため申し訳ありません、私はあなたがそれは非常にすべてのものです。でもhasntは
これはかなり野心的です。例えば、標準では、\でエスケープされている場合は電子メールアドレスのローカル部分に@を使用でき、ドメインは四角で囲まれたIPアドレスになります。たとえば、Foo \ @ Bar @ [192.232.96.4]は電子メールアドレスの正式な形式です。あなたの正規表現ではどちらも許可されません。あなたの質問に戻る:あなたは本のすべてのルールをチェックしたいのですか、最も明白な違反を指摘したいのですか?(ドメインがない@またはドメインが1つもないか、エスケープされていない@後者は多分意味をなさないでしょう。 – mathguy
私たちはちょうど最も明白な違反... "Joe \\ Blow" @ example.comは実際に合法的に形成された電子メールアドレスですが、正規表現を渡しません...ちょうどデータ入力ミスを防ぐために明らかにフィルタリングしようとしています –
あなたの最善の賭けは簡単なパーサーになるでしょう。私はこれが正規表現エンジンによって処理されることは疑いの余地があります。少なくとも、合理的な努力を払ってください。確かに、オラクルはこれに準拠していません。 Perlの正規表現の実装が可能かもしれません。 – collapsar