我有一个 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;
我建议您创建一个返回布尔值或 - 如我的示例 - 一个字符(Y - 是的,它是有效的;N - 不,它无效((为什么是字符?您可以在 SQL 中使用这样的函数。布尔值在PL/SQL中工作,但我的例子是纯SQL(。
我想它并不完美,但应该比仅仅测试某人输入的字符串是否包含猴子(@( 要好得多。
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>