EBS FORM pl/sql 验证邮箱格式(oracle 10g & oracle 6i)

方法一:利用正则表达式(oracle 10g)

Oracle 10g支持正则表达式的四个新函数分别是:REGEXP_LIKE、REGEXP_INSTR、REGEXP_SUBSTR、和REGEXP_REPLACE。

select  sysdate into p_sysdate from dual

  where  regexp_like(p_email,'\w+@\w+(\.\w+)+');

方法二:原始方法(oracle 6i)

因为用的环境是oracle 6i,所以不支持正则表达式验证。

在邮箱字段加触发器:WHEN-VALIDATE-ITEM

if :email_lines.email is null

then return;

elsif check_email(:email_lines.email) then

null;

else

message('请输入正确的邮箱');

raise form_trigger_failure; --抛出form级trigger

end if;

     调用的函数如下:

FUNCTION

 check_email(p_email in varchar2)

RETURN boolean IS

v_length number;

v_length_at number;

v_suffix  varchar2(30);

v_length_dot number;

 BEGIN

  v_length :=length(p_email);

  v_length_at:=instr(p_email,'@');

 --取出email的后缀

  if v_length=v_length_at or v_length_at <2 then

     return false;

  else   v_suffix:=substr(p_email,v_length_at+1,v_length);

    end if;

   v_length_dot:=instr(v_suffix,'.');

--判断后缀中是否有’. ’

   if v_length_dot<2 or v_length_dot=(v_length-v_length_at) or instr(v_suffix,'@')<>0 then

      return false;

--判断后缀中是否有连续的'..'

v_suffix:=substr(v_suffix,v_length_dot+1,length(v_suffix));

        if instr(v_suffix,'.')=1 then

          return false;

          end if;

   end if;

   return TRUE;

END;

posted @ 2012-01-03 19:55  CiWEi`  阅读(1765)  评论(0)    收藏  举报