我有一个Apex应用程序文本项,用逗号分隔符输入电子邮件ID。
现在我想验证电子邮件地址是否正确无论是否在应用程序项目中输入。
如何实现这一目标?
我使用的是以下代码,但无效。
declare
l_cnt varchar2(1000);
l_requestors_name varchar2(4000);
begin
select apex_item.text(1) Member
into l_requestors_name
from dual;
if not l_requestors_name not like '%@%' then
return true;
else
return false;
end if;
end;
答案 0 :(得分:2)
我建议你创建一个返回布尔值的函数或 - 如我的例子中 - 一个字符(Y - 是的,它是有效的; N - 不,它不是有效的)(为什么)你可以在SQL中使用这样的函数.Brolean在PL / SQL中工作,但我的例子是纯SQL)。
我认为它不是完美,但应该比测试某人输入的字符串是否包含 monkey (@)更好。
SQL> create or replace
2 function f_email_valid (par_email in varchar2)
3 return varchar2
4 is
5 begin
6 return
7 case when regexp_substr (
8 par_email,
9 '[a-zA-Z0-9._%-]+@[a-zA-Z0-9._%-]+\.[a-zA-Z]{2,4}')
10 is not null
11 or par_email is null then 'Y'
12 else 'N'
13 end;
14 end f_email_valid;
15 /
Function created.
SQL>
由于用户可以输入以逗号分隔的多个电子邮件地址,因此您必须将它们分成行,然后检查每个地址。看看:
SQL> with test (text) as
2 -- sample data
3 (select 'littlefoot@gmail.com,bigfootyahoo.com,a@@hotmail.com,b123@freemail.hr' from dual),
4 split_emails as
5 -- split that long comma-separated values column into rows
6 (select regexp_substr(text, '[^,]+', 1, level) email
7 from test
8 connect by level <= regexp_count(text, ',') + 1
9 )
10 -- check every e-mail
11 select email, f_email_valid(email) is_valid
12 from split_emails;
EMAIL IS_VALID
------------------------------ --------------------
littlefoot@gmail.com Y
bigfootyahoo.com N
a@@hotmail.com N
b123@freemail.hr Y
SQL>