我有一个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位
我很抱歉不包括我对此的尝试,我甚至不知道从哪里开始,谷歌搜索还没有成果
答案 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模块。