Oracle Regex_like函数:返回失败的

时间:2016-04-28 19:46:18

标签: regex oracle plsql error-handling regexp-like

我有一个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,如果不好,可能是一个新的变量

我想通过电子邮件mgptva; d@uclin2.berkeley.edu返回:

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

我很抱歉不包括我对此的尝试,我甚至不知道从哪里开始,谷歌搜索还没有成果

1 个答案:

答案 0 :(得分: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模块。

相关问题