判断email 输入是否合法

3/7/2017来源:SQL技巧人气:1716

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;