Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

andrearruda

Validar e-mail direto numa consulta?

Recommended Posts

Validar e-mail direto numa consulta?Primeiramente teria como realizar isso, acredito que sim! caso alguem tenha alguma ideia de como realizar isso me avise.Muito obrigado a todos!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi, eu utilizo a function abaixo:

DELIMITER $$DROP FUNCTION IF EXISTS `fu_valida_email`$$CREATE FUNCTION `fu_valida_email`(email VARCHAR(80)) RETURNS varchar(100)  LANGUAGE SQL  DETERMINISTIC  SQL SECURITY DEFINER  COMMENT 'Validar email'BEGIN  DECLARE retorno VARCHAR(100) DEFAULT '';  DECLARE nChar INT DEFAULT 0;  DECLARE cont INT DEFAULT 0;  DECLARE letra VARCHAR(1) DEFAULT '';  SET email := TRIM(email);  SET cont := LENGTH(email);  -- minimo de 5 caracteres  IF cont < 5 THEN	SET retorno := 'O e-mail deve ter no mínimo 5 caracteres';    END IF;  -- verificar quantos @ foram encontrados, deve ter apenas 1  IF cont >= 5 THEN	SET cont := 0;	REPEAT	  SET nChar := nChar + 1;	  SET letra := MID(email,nChar,1);	  IF letra = '@' THEN		SET cont := cont + 1;	  END IF;	  UNTIL nChar > LENGTH(email) 	END REPEAT;	IF cont > 1 THEN	  SET retorno := 'E-mail inválido: mais de um @ encontrado';	ELSE	  IF cont = 0 THEN		SET retorno := 'E-mail inválido: nenhum @ foi encontrado';	  END IF;	END IF;  END IF;  -- verificar a inicilização e finalização do email em relação ao @  IF TRIM(retorno) = '' THEN	IF INSTR(email,'@') = 1 THEN	  SET retorno := 'E-mail inválido: não pode iniciar com @';	END IF;	IF TRIM(retorno) = '' THEN	  IF MID(email,LENGTH(email)) = '@' THEN		SET retorno := 'E-mail inválido: não pode terminar com @';	  END IF;	END IF;  END IF;  -- verificar a existencia de pontos(.)  IF TRIM(retorno) = '' THEN	SET cont := 0;	SET nChar := 0;	REPEAT	  SET nChar := nChar + 1;	  SET letra := MID(email,nChar,1);	  IF letra = '.' THEN	SET cont = cont + 1;	  END IF;	  UNTIL nChar > LENGTH(email)	END REPEAT;	IF cont < 1 THEN	  SET retorno := 'E-mail inválido: não foram encontrados pontos(.)';	END IF;	IF TRIM(retorno) = '' THEN	  IF INSTR(email,'.') = 1 THEN		SET retorno := 'E-mail inválido: não pode ser iniciado com ponto(.)';	  END IF;	  IF TRIM(retorno) = '' THEN		IF MID(email,LENGTH(email)) = '.' THEN		  SET retorno := 'E-mail inválido: não pode terminar com ponto(.)';		END IF;		IF TRIM(retorno) = '' THEN		  -- verificar se foram encontradas ocorrências do ponto(.) após o arroba		  IF LOCATE('.',email,INSTR(email,'@')) = 0 THEN			SET retorno := 'E-mail inválido: não foi encontrado ponto(.) após o arroba(@)';		  END IF;		END IF;	  END IF;	END IF;  END IF;  -- verificar se possui pontos consecutivos após o arroba (@)  IF TRIM(retorno) = '' THEN	IF LOCATE('..',email,INSTR(email,'@')) > 0 THEN	  SET retorno := 'E-mail inváldo: pontos consecutivos encontrados (..) após o arroba(@)';	END IF;  END IF;  -- verificar se informou caracter inválido  IF TRIM(retorno) = '' THEN	SET cont := 0;	SET nChar := 0;	REPEAT	  SET nChar := nChar + 1;	  SET letra := MID(email,nChar,1);	  IF TRIM(letra) <> '' THEN		-- verifica se está entre A e Z, 0 a 9, possui @ ou - uo _ ou .		IF letra REGEXP '[a-z]|[0-9]|@+|-+|_+|\\.+' = 0 THEN		  SET retorno := CONCAT('E-mail inválido: caracter não permitido ',QUOTE(letra));		END IF;	  END IF;	  UNTIL nChar > LENGTH(email)	END REPEAT;  END IF;  RETURN retorno;END$$DELIMITER;
Era uma função em Visual Basic e 'converti' para o MySQL, se você usa a versão 5.x do mysql funcionará.

Esta função retorna um texto com a mensagem de erro da validação, se não retornar mensagem é pq funfou.

Não é nada advanced mas é o que tenho no momento.

Ex. SELECT fu_valida_email('cassitos@gmail.com.').

Utilizo juntamente com Stored Procedures.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.