lunes, 4 de marzo de 2013

Validar dirección de email con t-sql

Una función bastante recurrente es tener que validar si una dirección de correo electrónico es válida o no.

He hecho una función de de t-sql que valida si un mail es válido o no. En caso de ser válido devuelve el correo electrónico en minúsculas y sin espacios al principio y al final; si no es válido devuelve una cadena vacía.

Esta función no contempla todos los casos pero se aproxima bastante al estándar, por ejemplo la dirección "dircon@y?"@dominio.com sería válido, pero esta función devolverá que no es correcto.

Código de la función:

CREATE FUNCTION [dbo].[fn_CompruebaEmail](@email VARCHAR(255))   

RETURNS VARCHAR(255)  
as  
BEGIN  
     Declare @valid bit  
     Declare @domain as nvarchar(256)
     Declare @str1 Varchar(128)
Declare @i int
 
     IF @email IS NOT NULL   
 SET @email = REPLACE(@email,CHAR(10),'')
 SET @email = REPLACE(@email,CHAR(13),'')
 SET @email = REPLACE(@email,';','')
          SET @email = LOWER(@email)
          Set @email = LTRIM(RTRIM(@email))
          While (CHARINDEX('  ',@email,0) <> 0)
Begin
Set @email = REPLACE(@email,'  ','')
Continue
 End  
 Set @email = LTRIM(RTRIM(@email))
          SET @valid = 0  
          --IF @email like '[a-z,0-9,_,-]%@[a-z,0-9,_,-]%.[a-z][a-z]%'  
          If  Patindex('[a-z,0-9,_,-]%@[a-z,0-9,-]%.[a-z][a-z]%', @email)=1  
AND @email Not Like '%@%\_%'  ESCAPE '\'
             AND @email NOT like '%@%@%'  
             AND CHARINDEX('.@',@email) = 0  
             AND CHARINDEX('..',@email) = 0  
             AND CHARINDEX(',',@email) = 0  
             AND RIGHT(@email,1) between 'a' AND 'z'  
             And Patindex ('%[ &'',":;!+=\/()<>]%', @email) = 0
               SET @valid=1  
     If @email like '%._'
Set @valid = 0
     If @valid = 0
     Begin
Set @email = ''
     End
     
     --Se comprueba el dominio.
     
     If @email <> ''
     Begin
Set @str1 = ''
Set @i = 48
While @i <= 57
Begin
Set @str1 = @str1 + '|' + Char(@i)
Set @i = @i + 1
End

Set @i = 97
While @i <= 122
Begin
Set @str1 = @str1 + '|' + Char(@i)
Set @i = @i + 1
End    
   
Set @str1 = @str1 + '|.'
Set @str1 = @str1 + '|-'
    
Set @domain = RIGHT(@email,LEN(@email)-CHARINDEX('@',@email))
 
If @domain Like '%[^' + @str1 + ']%' escape '|'
Begin
Set @email = '' 
End
 
End
     
     Return @email
END

No hay comentarios:

Publicar un comentario