CREATE OR REPLACE FUNCTION EMAILVALIDATE_V1(email VARCHAR2) RETURN NUMBER IS t_valid NUMBER(1); t_totallen NUMBER(2); t_counter NUMBER(2):=0; t_atpos NUMBER(2):= 1; i NUMBER(2) := 1; t_pointpos NUMBER(2):= 1; mail_ch VARCHAR2(1); BEGIN t_totallen := LENGTH(email); t_counter := t_totallen; i := 1; t_valid := 1; -- Validamos la longitud del correo, no puede ser vacío IF LENGTH(ltrim(rtrim(email))) = 0 THEN t_valid := 0; ELSE -------------------------------------- --Valida que no contenga caracteres inválidos en un correo t_counter := t_totallen; WHILE t_counter > 0 LOOP mail_ch := substr(email,i,1); i := i+1; t_counter := t_counter -1; IF mail_ch IN ( ' ','!','#','$','%', '^','&','*','(',')', '-','','"', '+','|','{','}','[', ']',':','>','<','?', '/','','=') THEN t_valid := 0; EXIT; END IF; END LOOP; --------------------------------------- --Valida que no tenga mas de un @ t_atpos := instr(email,'@',1,2) ; IF t_atpos > 1 then t_valid := 0; END IF; --------------------------------------- --Valida que contenga solo un @ t_atpos := instr(email,'@',1); IF t_atpos IN (0,1) THEN t_valid := 0; END IF; --------------------------------------- --Validamos que tenga por lo menos un punto (.) t_pointpos := instr(email,'.',1) ; IF t_pointpos IN (0,1) THEN t_valid := 0; END IF; ---------------------------------------- END IF; RETURN t_valid; END;
También se pueden utilizar las expresiones regulares. Ejemplo:
Select Correo
From (Select ‘[email protected]’ Correo
From Dual)
Where Regexp_Like(Correo,
‘\s*\w+([-+.»]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*\s*’);
Si retorna el correo es porque cumple la expresión, en caso contrario no devolverá ninguna fila.
Gracias x la ayuda Erick… me funcionó
Buenas tardes, me gustaría saber si hay una manera de validar los correos en SQL o en R a partir de un script que te verifique directamente en una página tipo email verifier si el correo es válido de tal manera de no hacerlo uno a uno y que además me cree una columna en donde me diga si es o no correcto. Muchas gracias
Erick te dio la respuesta, ahí esta como validarlo en SQL Server
Bueno acá creo que lo que María Paez pregunta y que yo también lo hago, es si hay alguna forma de saber si el correo es válido, si existe en el dominio, porque el dominio se puede validar si existe pero puede que el correo como tal no sea valido, es decir que no existe como una cuenta de email valida que alguien use.
Ya saber si un correo en específico existe en un servidor no se puede hacer.
Roy se puede validar también si termina en .com para los correos mas populares como Hotmail y gmail puedes ayudarme con eso, tienes funciones similares para validar Teléfonos y Documento de Identidad
Roy se puede adicionar para validar los correos que son [email protected] como es un campo obligatorio, el asesor los ingresa para completar
Ola,
MUITO OBRIGADO.
I DON’T SPEAK SPANISH BUT I SPEAK PORTUGUESE AND COULD UNDERSTAND YOU.
THANK YOU SO MUCH I WAS ABLE TO DO IT WITH YOUR MODEL AS AN EXEMPLE.
HERE IS HOW I DID IT:
CREATE OR REPLACE FUNCTION valida_email (mail in varchar2) RETURN number IS
CONT NUMBER (2) := 1;
MAILV VARCHAR (200);
resulta number (1);
arroba number(2) := 1;
BEGIN
— VALIDA SE NAO É NULO
IF mail IS NULL then
RETURN 1;
ELSE
— VALIDA CARACTERES
MAILV := length(mail);
WHILE CONT > 0 and MAILV SUBSTR(MAIL, -1)
LOOP
MAILV := SUBSTR(MAIL, cont, 1);
cont := cont +1;
if MAILV IN (‘ ‘,’!’,’#’,’$’,’%’,
‘^’,’&’,’*’,'(‘,’)’,
‘-‘,»,'»‘,
‘+’,’|’,'{‘,’}’,'[‘,
‘]’,’:’,’>’,’ 1 then
return 1;
end if;
if mail like ‘%@%.com’ then
resulta := 0;
end if;
END IF;
RETURN resulta;
END;
/