Validação E-MAIL

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
  

Mensagemem Sex, 30 Set 2005 3:40 pm

Alguém conhece uma rotina para validar endereço de e-mail ?
racandradebr
Localização: SP

Mensagemem Sex, 14 Out 2005 2:32 pm

EU não conheço nenhuma PRONTA, mas é bem fácil de fazer uma "genérica".
Exemplo:
* Testa se existe o caracter @
* Testa se existe texto antes desse caracter.
* Testa se existe texto depois desse caracter.
* Testa se existe um PONTO depois do @
etc...

Eu já ouvi falar de rotinas de email bem complexas, que até dão um tipo de um "ping" na URL que vem depois da @. (exemplo: joao@blabla.com --> vai fazer um ping no blabla.com pra ver se existe).

O ideal, é ENVIAR um email pro sujeito com uma sequencia de caracteres aleatórios e ele confirmar essa sequencia no site ou no programa, depois de receber esse email. (ou seja, é certo que o email dele EXISTE e que é dele mesmo o email)

Boa sorte!
dr_gori
Localização: Portland, OR USA

Thomas F. G

Você já respondeu a dúvida de alguém hoje?
http://glufke.net/oracle/search.php?search_id=unanswered

Mensagemem Qua, 14 Dez 2005 9:13 am

Fiz uma função e esta funcionando:

Código: Selecionar todos
-- esta função verifica se o email tem o @ e o .(ponto).
-- verifica espaço em branco depois do "."
-- verifica espaço em branco depois do "@"
-- retorna false quando não tem e true quando tem
--
function f_valida_email ( p_email      in  varchar2,
                          p_erro_tela  out varchar2 ) return boolean is
  --
  v_email        varchar2(200);
  -- expressão para validar e-mail
  v_pattern      varchar2(200) := '^[a-z]+[\.\_\-[a-z0-9]+]*[a-z0-9]@[a-z0-9]+\-?[a-z0-9]{1,63}\.?[a-z0-9]{0,6}\.?[a-z0-9]{0,6}\.[a-z]{0,6}$';
begin
  v_email := lower(p_email);
  if  not OWA_PATTERN.MATCH (v_email,v_pattern) then
      p_erro_tela  :=  'email inválido!';
      return (FALSE);
  end if;
  if  instr(p_email,'..')  >  0  then
      p_erro_tela  :=  'email inválido!';
      return (FALSE);
  end if;
  --
  return (TRUE);
  --
end f_valida_email;
emedino
Localização: RS

Mensagemem Qua, 21 Dez 2005 10:30 am

Tentei usar essa função, mas na hora de compilar ele me retornou o seguinte erro:
OWA_PATTERN.MATCH

Wrong number or Types of arguments in Call to 'MATCH'

Line 9, Column 29
Toad
Localização: Seattle, WA

Mensagemem Qua, 21 Dez 2005 11:03 am

Po cara...aqui funcionou direitinho... Eu to usando o Oracle 9.2.0.4.0

Código: Selecionar todos
SQL> desc owa_pattern
FUNCTION AMATCH RETURNS NUMBER(38)
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
LINE                           VARCHAR2                IN
FROM_LOC                       NUMBER(38)              IN
PAT                            VARCHAR2                IN
FLAGS                          VARCHAR2                IN     DEFAULT
FUNCTION AMATCH RETURNS NUMBER(38)
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
LINE                           VARCHAR2                IN
FROM_LOC                       NUMBER(38)              IN
PAT                            TABLE OF VARCHAR2(4)    IN/OUT
FLAGS                          VARCHAR2                IN     DEFAULT
FUNCTION AMATCH RETURNS NUMBER(38)
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
LINE                           VARCHAR2                IN
FROM_LOC                       NUMBER(38)              IN
PAT                            VARCHAR2                IN
BACKREFS                       TABLE OF VARCHAR2(32767) OUT
FLAGS                          VARCHAR2                IN     DEFAULT
FUNCTION AMATCH RETURNS NUMBER(38)
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
LINE                           VARCHAR2                IN
FROM_LOC                       NUMBER(38)              IN
PAT                            TABLE OF VARCHAR2(4)    IN/OUT
BACKREFS                       TABLE OF VARCHAR2(32767) OUT
FLAGS                          VARCHAR2                IN     DEFAULT
FUNCTION CHANGE RETURNS NUMBER(38)
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
LINE                           VARCHAR2                IN/OUT
FROM_STR                       VARCHAR2                IN
TO_STR                         VARCHAR2                IN
FLAGS                          VARCHAR2                IN     DEFAULT
PROCEDURE CHANGE
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
LINE                           VARCHAR2                IN/OUT
FROM_STR                       VARCHAR2                IN
TO_STR                         VARCHAR2                IN
FLAGS                          VARCHAR2                IN     DEFAULT
FUNCTION CHANGE RETURNS NUMBER(38)
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
MLINE                          RECORD                  IN/OUT
   ROWS                         TABLE OF VARCHAR2(32767) IN/OUT
   NUM_ROWS                     NUMBER(38)              IN/OUT
   PARTIAL_ROW                  BOOLEAN                 IN/OUT
FROM_STR                       VARCHAR2                IN
TO_STR                         VARCHAR2                IN
FLAGS                          VARCHAR2                IN     DEFAULT
PROCEDURE CHANGE
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
MLINE                          RECORD                  IN/OUT
   ROWS                         TABLE OF VARCHAR2(32767) IN/OUT
   NUM_ROWS                     NUMBER(38)              IN/OUT
   PARTIAL_ROW                  BOOLEAN                 IN/OUT
FROM_STR                       VARCHAR2                IN
TO_STR                         VARCHAR2                IN
FLAGS                          VARCHAR2                IN     DEFAULT
PROCEDURE GETPAT
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
ARG                            VARCHAR2                IN
PAT                            TABLE OF VARCHAR2(4)    IN/OUT
FUNCTION MATCH RETURNS BOOLEAN
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
LINE                           VARCHAR2                IN
PAT                            VARCHAR2                IN
FLAGS                          VARCHAR2                IN     DEFAULT
FUNCTION MATCH RETURNS BOOLEAN
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
LINE                           VARCHAR2                IN
PAT                            TABLE OF VARCHAR2(4)    IN/OUT
FLAGS                          VARCHAR2                IN     DEFAULT
FUNCTION MATCH RETURNS BOOLEAN
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
LINE                           VARCHAR2                IN
PAT                            VARCHAR2                IN
BACKREFS                       TABLE OF VARCHAR2(32767) OUT
FLAGS                          VARCHAR2                IN     DEFAULT
FUNCTION MATCH RETURNS BOOLEAN
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
LINE                           VARCHAR2                IN
PAT                            TABLE OF VARCHAR2(4)    IN/OUT
BACKREFS                       TABLE OF VARCHAR2(32767) OUT
FLAGS                          VARCHAR2                IN     DEFAULT
FUNCTION MATCH RETURNS BOOLEAN
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
MLINE                          RECORD                  IN
   ROWS                         TABLE OF VARCHAR2(32767) IN
   NUM_ROWS                     NUMBER(38)              IN
   PARTIAL_ROW                  BOOLEAN                 IN
PAT                            VARCHAR2                IN
RLIST                          RECORD                  OUT
   ROWS                         TABLE OF NUMBER(38)     OUT
   NUM_ROWS                     NUMBER(38)              OUT
FLAGS                          VARCHAR2                IN     DEFAULT
FUNCTION MATCH RETURNS BOOLEAN
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
MLINE                          RECORD                  IN
   ROWS                         TABLE OF VARCHAR2(32767) IN
   NUM_ROWS                     NUMBER(38)              IN
   PARTIAL_ROW                  BOOLEAN                 IN
PAT                            TABLE OF VARCHAR2(4)    IN/OUT
RLIST                          RECORD                  OUT
   ROWS                         TABLE OF NUMBER(38)     OUT
   NUM_ROWS                     NUMBER(38)              OUT
FLAGS                          VARCHAR2                IN     DEFAULT

SQL>
dr_gori
Localização: Portland, OR USA

Thomas F. G

Você já respondeu a dúvida de alguém hoje?
http://glufke.net/oracle/search.php?search_id=unanswered

Mensagemem Qua, 21 Dez 2005 1:31 pm

A Minha versão é a:

Version Oracle9i Release 9.2.0.5.0 - Production
Server 9.2
Client 7.3


Deveria funcionar ao compilar certo?!:roll:

A Versão do Forms também interfere?
Toad
Localização: Seattle, WA

Matheus H. Gonçalves
www.toad.com.br
www.twitter.com/toadgeek

Mensagemem Qua, 01 Mar 2006 5:36 pm

Toad, a função que desenvolvi é esta, veja se lhe ajuda.

Código: Selecionar todos
create or replace  function  f_valida_email (p_email in varchar2)  return boolean deterministic is
-- ####################################################################################################################################################
-- # Data: 31/01/2006                                                                                                                                 #     
-- # Autor: Charles Mafra cmafra@gmail.com                                                                                                            #
-- # Objetivo: Validar E-mail usando Expressões Regulares                                                                                             #
-- # Lógica O e-mail é composto por                                                                                                                   #
-- # 1 String válida um sinal de @ (arroba) e outra string válida                                                                                     #
-- # Sendo a definição de string como: Uma següência de Caracteres entre 'a' e 'z' , 'A' e 'Z' e finalmente '0' e '9'                                 #
-- #                                  mais o sinal de "_" (underscore), o sinal de "." ponto (sendo este válido apenas entre següência de Caracteres) #
-- # Exemplo de Emails válidos:                                                                                                                       #
-- # joao.silva@hotmail.com                                                                                                                           #
-- # joao2000.silva@terra.com.br                                                                                                                      #       
-- # joao2.silva.2006@orcangola.co.ao.gov                                                                                                             #   
-- # joao2.silva.2006@2006.year.net                                                                                                                   #     
-- # Exemplo de Emails inválidos (motivo):                                                                                                            #     
-- # joao.silva@hot mail.com (espaço em branco)                                                                                                       #
-- # joão.silva@hotmail.com  (acento)                                                                                                                 #
-- # joao.silva@hotmail@com  (mais de 1 arroba)                                                                                                       # 
-- # joao.silva@hotmailcom   (falta de ponto no domínio)                                                                                              #
-- #                                                                                                                                                  #
-- # A função Deterministic tem seu retorno armazenado na SGA para evitar reprocessamento do resultado (aumento de performance)                       #
-- # Para saber mais sobre expressões regulares visite o site:                                                                                        #
-- # http://oraqa.com/2006/01/20/how-to-check-a-string-format-with-the-owa_patternmatch-function/                                                     #
-- ####################################################################################################################################################
begin
    if owa_pattern.match(p_email,'^\w{1,}[.,0-9,a-z,A-Z,_]\w{1,}[.,0-9,a-z,A-Z,_]\w{1,}'||
                                 '@\w{1,}[.,0-9,a-z,A-Z,_]\w{1,}[.,0-9,a-z,A-Z,_]\w{1,}[.,0-9,a-z,A-Z,_]\w{1,}$') then
       dbms_output.put_line('email válido : '||p_email);
       return true;
    else
       dbms_output.put_line('email inválido : '||p_email);
       return false;
    end if;
end f_valida_email;
/
charlesmafra
Localização: Angola

Charles Mafra
Oracle Developer

Mensagemem Seg, 24 Mar 2008 1:54 pm

Esse funcionou ok, cara!
Obrigado.
Toad
Localização: Seattle, WA

Matheus H. Gonçalves
www.toad.com.br
www.twitter.com/toadgeek

Mensagemem Sex, 19 Set 2008 2:34 pm

Ai vai uma simples:

Código: Selecionar todos
CREATE OR REPLACE FUNCTION xx_check_email(l_user_name IN VARCHAR2)
  RETURN VARCHAR2 IS
  l_dot_pos    NUMBER;
  l_at_pos     NUMBER;
  l_str_length NUMBER;
BEGIN
  l_dot_pos    := instr(l_user_name
                       ,'.');
  l_at_pos     := instr(l_user_name
                       ,'@');
  l_str_length := length(l_user_name);
  IF ((l_dot_pos = 0) OR (l_at_pos = 0) OR (l_dot_pos = l_at_pos + 1) OR
     (l_at_pos = 1) OR (l_at_pos = l_str_length) OR
     (l_dot_pos = l_str_length))
  THEN
    RETURN 'FAILURE';
  END IF;
  IF instr(substr(l_user_name
                 ,l_at_pos)
          ,'.') = 0
  THEN
    RETURN 'FAILURE';
  END IF;
  RETURN 'SUCCESS';
END xx_check_email;
dr_gori
Localização: Portland, OR USA

Thomas F. G

Você já respondeu a dúvida de alguém hoje?
http://glufke.net/oracle/search.php?search_id=unanswered



Voltar para PL/SQL

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 7 visitantes

cron