Validar email

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
flebrao
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 116
Registrado em: Seg, 10 Abr 2006 4:46 pm
Localização: Santa Bárbara D'Oeste
Sua vida É o que você É!!!!

Bom dia pessoal...

Alguém possui alguma função para validar email?

grato
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother, pronta aqui, infelizmente não tenho.
Mas, caso queira montar, segue mais ou menos o caminho das pedras:

Selecionar tudo


-- Se retornar maior que zero, tem o Arroba
SELECT INSTR('paulotrevisolli@ig.com.br','@')
  FROM dual;
  
-- Se retornar maior que zero, tem ao menos um ponto.  
SELECT INSTR('paulotrevisolli@ig.com.br','.')
  FROM dual;
  
  
qualquer coisa, manda ai pra gente.
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

Segue um exemplo que valida se a rotina tem caracter inválido e se tem caracteres obrigatórios (@.), acho q ela poderia ser um pouco mais completa, ex: validar tamanho do nome, do dominio...

Selecionar tudo

SQL> DECLARE
  2     FUNCTION valida_email (p_email IN VARCHAR2 DEFAULT NULL)
  3        RETURN NUMBER
  4     IS
  5        v_arroba      BOOLEAN        DEFAULT FALSE;
  6        v_ponto       BOOLEAN        DEFAULT FALSE;
  7        v_chr         BOOLEAN        DEFAULT FALSE;
  8        v_valid_chr   VARCHAR2 (100)
  9           := '0123456789abcdefghijklmnopqrstuvxzwykABCDEDFGHIJKLMNOPQRSTUVXZWYK-_.@';
 10     BEGIN
 11        IF p_email IS NOT NULL
 12        THEN
 13           FOR a IN 1 .. LENGTH (p_email)
 14           LOOP
 15              FOR b IN 1 .. LENGTH (v_valid_chr)
 16              LOOP
 17                 IF SUBSTR (p_email, a, 1) = SUBSTR (v_valid_chr, b, 1)
 18                 THEN
 19                    v_chr := TRUE;
 20                    EXIT;
 21                 ELSE
 22                    v_chr := FALSE;
 23                 END IF;
 24              END LOOP;
 25  
 26              IF NOT v_chr
 27              THEN
 28                 v_ponto := FALSE;
 29                 EXIT;
 30              END IF;
 31  
 32              IF v_arroba
 33              THEN
 34                 IF     SUBSTR (p_email, a, 1) = '.'
 35                    AND SUBSTR (p_email, a - 1, 1) <> '@'
 36                    AND a <> LENGTH (p_email)
 37                 THEN
 38                    v_ponto := TRUE;
 39                 END IF;
 40              END IF;
 41  
 42              IF SUBSTR (p_email, a, 1) = '@' AND a = 1
 43              THEN
 44                 v_ponto := FALSE;
 45                 EXIT;
 46              ELSIF SUBSTR (p_email, a, 1) = '@'
 47              THEN
 48                 v_arroba := TRUE;
 49              END IF;
 50           END LOOP;
 51        END IF;
 52  
 53        IF v_ponto
 54        THEN
 55           RETURN 0;
 56        ELSE
 57           RETURN 1;
 58        END IF;
 59     END;
 60  BEGIN
 61     IF valida_email ('jose@globo.com.br') = 0
 62     THEN
 63        DBMS_OUTPUT.put_line (' jose@globo.com.br : ok ');
 64     ELSE
 65        DBMS_OUTPUT.put_line (' jose@globo.com.br : falso ');
 66     END IF;
 67  
 68     IF valida_email ('jose@globo.com') = 0
 69     THEN
 70        DBMS_OUTPUT.put_line (' jose@globo.com : ok ');
 71     ELSE
 72        DBMS_OUTPUT.put_line (' jose@globo.com : falso ');
 73     END IF;
 74  
 75     IF valida_email ('jose@globocom') = 0
 76     THEN
 77        DBMS_OUTPUT.put_line (' jose@globocom : ok ');
 78     ELSE
 79        DBMS_OUTPUT.put_line (' jose@globocom : falso ');
 80     END IF;
 81  
 82     IF valida_email ('jose-globo.com') = 0
 83     THEN
 84        DBMS_OUTPUT.put_line (' jose-globo.com : ok ');
 85     ELSE
 86        DBMS_OUTPUT.put_line (' jose-globo.com : falso ');
 87     END IF;
 88     
 89     IF valida_email ('jose@[globo.com') = 0
 90     THEN
 91        DBMS_OUTPUT.put_line (' jose@[globo.com : ok ');
 92     ELSE
 93        DBMS_OUTPUT.put_line (' jose@[globo.com : falso ');
 94     END IF;   
 95  END;
 96  /
jose@globo.com.br : ok
jose@globo.com : ok
jose@globocom : falso
jose-globo.com : falso
jose@[globo.com : falso

PL/SQL procedure successfully completed.
[]'s
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante