我有一个返回的电子邮件地址是否有效的Oracle函数或不甲骨文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失败?
,而不是重新调整只是空,如果不好,也许对原因
我想电子邮件mgptva一个新的变量; [email protected]返回:
v_return_msg =“无效字符‘;’ 7位
我不包括我对这个尝试很抱歉,我不知道从哪里开始,谷歌搜索处理不当是富有成果的
这是非常雄心勃勃的,因为它是;例如,标准允许在电子邮件地址的本地部分使用@,如果使用\转义该地址,则允许该域成为方括号中的四部分IP地址。例如,Foo \ @ Bar @ [192.232.96.4]是电子邮件地址的合法格式。你的正则表达式不允许。所以回到你的问题:你想检查本书中的每一条规则,或者只是指出最明显的违规行为(没有@或没有域或多个未转义@或整个电子邮件字符串太长)?后者也许有一定意义。 – mathguy
是啊,我们只是最明显的违规行为...“乔\\吹”@ example.com是一个实际合法形成的电子邮件地址,但不通过正则表达式...只是试图过滤明显,以防止数据输入错误 –
你最好的选择imho将是一个简单的解析器。我怀疑这可以通过一个正则表达式引擎来处理,至少有合理的努力 - 当然,甲骨文公司并没有达到这个标准。 Perl的正则表达式实现可能是可能的。 – collapsar