Apex 应用程序文本项字段的电子邮件验证



我有一个 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>

最新更新