判断email 输入是否合法

PROCEDURE check_client_email(p_check_char IN VARCHAR2,
                               p_sign       OUT VARCHAR2,
                               p_message    OUT VARCHAR2) IS
    v_email      VARCHAR2(1000);
    v_singlechar VARCHAR2(3);


    v_err_code VARCHAR2(10);
    v_prompt   VARCHAR2(1000);
  BEGIN
    p_sign := 'N';


    --不区分大小写,全部换成小写
    v_email := LOWER(p_check_char);
    v_email := NVL(v_email, '*');


    --IF LENGTH(v_email) >= 6 THEN
    --检查邮件地址中是否有“@”和“.”两个关键字符
    IF INSTR(v_email, '@') = 0 OR INSTR(v_email, '.') = 0 THEN
      p_sign    := 'N';
      p_message := '录入的EMAIL不规范,EMAIL未含有“@”和“.”两个关键字符';
      RETURN;
    END IF;


    --检查:
    --1、是否出现了多个“@”符号
    --2、检查“@”符号是否在开头和结尾
    --3、“.”符号在“@”符号之前的部分及“@”符号之后的部分,均不能作为开始或结尾符
    --4、“@”符号后的部分,点号至少出现一次,且不能连续出现
    IF INSTR(v_email, '@', INSTR(v_email, '@') + 1) <> 0 OR
       INSTR(v_email, '@') = 1 OR INSTR(v_email, '@') = LENGTH(v_email) OR
       INSTR((SUBSTR(v_email, 1, INSTR(v_email, '@') - 1)), '.') = 1 OR
       INSTR(SUBSTR(v_email, 1, INSTR(v_email, '@') - 1), '.', -1) =
       LENGTH(SUBSTR(v_email, 1, INSTR(v_email, '@') - 1)) OR
       INSTR((SUBSTR(v_email, INSTR(v_email, '@') + 1)), '.') = 1 OR
       INSTR(SUBSTR(v_email, INSTR(v_email, '@') + 1), '.', -1) =
       LENGTH((SUBSTR(v_email, INSTR(v_email, '@') + 1))) OR
       INSTR(SUBSTR(v_email, INSTR(v_email, '@') + 1), '.') = 0 OR
       INSTR((SUBSTR(v_email, INSTR(v_email, '@') + 1)), '..') > 0 THEN
      p_sign    := 'N';
      p_message := '录入的EMAIL不规范';
      RETURN;
    END IF;


    --A段只能由字母、数字、下划线、中划线和点号组成
    FOR i IN 1 .. LENGTH(SUBSTR(v_email, 1, INSTR(v_email, '@') - 1)) LOOP
      v_singlechar := SUBSTR((SUBSTR(v_email, 1, INSTR(v_email, '@') - 1)),
                             i,
                             1);


      IF v_singlechar NOT IN ('_',
                              '-',
                              '.',
                              '0',
                              '1',
                              '2',
                              '3',
                              '4',
                              '5',
                              '6',
                              '7',
                              '8',
                              '9',
                              'a',
                              'b',
                              'c',
                              'd',
                              'e',
                              'f',
                              'g',
                              'h',
                              'i',
                              'j',
                              'k',
                              'l',
                              'm',
                              'n',
                              'o',
                              'p',
                              'q',
                              'r',
                              's',
                              't',
                              'u',
                              'v',
                              'w',
                              'x',
                              'y',
                              'z') THEN
        p_sign    := 'N';
        p_message := '录入的EMAIL不规范';
        RETURN;
      END IF;
    END LOOP;


    --B、C段开头只能为字母或数字
    IF SUBSTR(SUBSTR(v_email,
                     INSTR(v_email, '@') + 1,
                     INSTR(v_email, '.') - 1 - INSTR(v_email, '@')),
              1,
              1) NOT IN ('0',
                         '1',
                         '2',
                         '3',
                         '4',
                         '5',
                         '6',
                         '7',
                         '8',
                         '9',
                         'a',
                         'b',
                         'c',
                         'd',
                         'e',
                         'f',
                         'g',
                         'h',
                         'i',
                         'j',
                         'k',
                         'l',
                         'm',
                         'n',
                         'o',
                         'p',
                         'q',
                         'r',
                         's',
                         't',
                         'u',
                         'v',
                         'w',
                         'x',
                         'y',
                         'z') OR
       SUBSTR(SUBSTR(SUBSTR(v_email, INSTR(v_email, '@') + 1),
                     INSTR(SUBSTR(v_email, INSTR(v_email, '@') + 1), '.') + 1),
              1,
              1) NOT IN ('0',
                         '1',
                         '2',
                         '3',
                         '4',
                         '5',
                         '6',
                         '7',
                         '8',
                         '9',
                         'a',
                         'b',
                         'c',
                         'd',
                         'e',
                         'f',
                         'g',
                         'h',
                         'i',
                         'j',
                         'k',
                         'l',
                         'm',
                         'n',
                         'o',
                         'p',
                         'q',
                         'r',
                         's',
                         't',
                         'u',
                         'v',
                         'w',
                         'x',
                         'y',
                         'z') THEN
      p_sign    := 'N';
      p_message := '录入的EMAIL不规范';
      RETURN;
    END IF;


    --B段只能由字母、数字、下划线、中划线和点号组成
    IF LENGTH(SUBSTR(SUBSTR(v_email, INSTR(v_email, '@') + 1),
                     1,
                     INSTR(SUBSTR(v_email, INSTR(v_email, '@') + 1), '.') - 1)) > 1 THEN
      FOR i IN 2 .. LENGTH(SUBSTR(SUBSTR(v_email, INSTR(v_email, '@') + 1),
                                  1,
                                  INSTR(SUBSTR(v_email,
                                               INSTR(v_email, '@') + 1),
                                        '.') - 1)) LOOP
        v_singlechar := SUBSTR(SUBSTR(SUBSTR(v_email,
                                             INSTR(v_email, '@') + 1),
                                      1,
                                      INSTR(SUBSTR(v_email,
                                                   INSTR(v_email, '@') + 1),
                                            '.') - 1),
                               i,
                               1);


        IF v_singlechar NOT IN ('_',
                                '-',
                                '.',
                                '0',
                                '1',
                                '2',
                                '3',
                                '4',
                                '5',
                                '6',
                                '7',
                                '8',
                                '9',
                                'a',
                                'b',
                                'c',
                                'd',
                                'e',
                                'f',
                                'g',
                                'h',
                                'i',
                                'j',
                                'k',
                                'l',
                                'm',
                                'n',
                                'o',
                                'p',
                                'q',
                                'r',
                                's',
                                't',
                                'u',
                                'v',
                                'w',
                                'x',
                                'y',
                                'z') THEN
          p_sign    := 'N';
          p_message := '录入的EMAIL不规范';
          RETURN;
        END IF;
      END LOOP;
    END IF;


    --C段只能由字母、数字、下划线、中划线和点号组成
    IF LENGTH(SUBSTR(SUBSTR(v_email, INSTR(v_email, '@') + 1),
                     INSTR(SUBSTR(v_email, INSTR(v_email, '@') + 1), '.') + 1)) > 1 THEN
      FOR i IN 2 .. LENGTH(SUBSTR(SUBSTR(v_email, INSTR(v_email, '@') + 1),
                                  INSTR(SUBSTR(v_email,
                                               INSTR(v_email, '@') + 1),
                                        '.') + 1)) LOOP
        v_singlechar := SUBSTR(SUBSTR(SUBSTR(v_email,
                                             INSTR(v_email, '@') + 1),
                                      INSTR(SUBSTR(v_email,
                                                   INSTR(v_email, '@') + 1),
                                            '.') + 1),
                               i,
                               1);


        IF v_singlechar NOT IN ('_',
                                '-',
                                '.',
                                '0',
                                '1',
                                '2',
                                '3',
                                '4',
                                '5',
                                '6',
                                '7',
                                '8',
                                '9',
                                'a',
                                'b',
                                'c',
                                'd',
                                'e',
                                'f',
                                'g',
                                'h',
                                'i',
                                'j',
                                'k',
                                'l',
                                'm',
                                'n',
                                'o',
                                'p',
                                'q',
                                'r',
                                's',
                                't',
                                'u',
                                'v',
                                'w',
                                'x',
                                'y',
                                'z') THEN
          p_sign    := 'N';
          p_message := '录入的EMAIL不规范';
          RETURN;
        END IF;
      END LOOP;
    END IF;


    p_sign    := 'Y';
    p_message := '校验成功';
  EXCEPTION
    WHEN OTHERS THEN
      p_sign    := 'E';
      p_message := SUBSTRB('校验EMAIL信息' || p_check_char || '时异常:' || SQLERRM,
                           1,
                           300);
      -- Logging the error
      v_err_code := NULL;
      pub_error_handle.exception_no_raise('l_pub_public_biz.check_client_email',
                                          v_err_code,
                                          p_message,
                                          v_prompt);
  END check_client_email;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值