0

我有一个 oracle 函数,它返回电子邮件地址是否有效

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 ,而不是重新调整 null ,也许是一个新的变量

我想发送电子邮件至 mgptva;d@uclin2.berkeley.edu 回复:

v_return_msg="无效字符';' 在位置 7

很抱歉没有包括我的尝试,我什至不知道从哪里开始,谷歌搜索没有结果

4

1 回答 1

1

正则表达式匹配或不匹配。这就是你从他们那里得到的一切。

电子邮件地址很复杂,很难使用正则表达式进行验证。如果您的核心业务不是构建电子邮件地址验证器,我建议不要再在这里浪费您的时间,而是继续前进。

我非常同意这篇文章停止使用正则表达式验证电子邮件地址,我的规范电子邮件验证是:

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 回答