首页 > 开发 > 综合 > 正文

判断email 输入是否合法

2024-07-21 02:53:10
字体:
来源:转载
供稿:网友
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;
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表