Проверка электронной почты для поля текстового элемента приложения Apex - PullRequest
0 голосов
/ 16 мая 2018

У меня есть текстовый элемент приложения Apex для ввода идентификаторов электронной почты с разделителем запятых.

Теперь я хочу проверить адрес электронной почты, является ли он правильным или нет, который введен в элемент приложения.

Как этого добиться?

Я использую приведенный ниже код, но он не работает.

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 голосов
/ 16 мая 2018

Я бы предложил вам создать функцию, которая возвращает логический или - как в моем примере - символ (Y - да, он действителен; N - нет, он недействителен) (почему символ? Вы можете используйте такую ​​функцию в SQL. Boolean работает в 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>
...