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

时间:2018-05-16 15:55:03

标签: oracle-apex oracle-apex-5 oracle-apex-5.1

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

1 个答案:

答案 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>