El otro día tuve que hacer una función en T-Sql que me permitiera comprobar si una dirección de correo electrónico era válida o no. Dentro de esta comprobación tuve que llegar a comprobar que el dominio no tuviera ningún carácter que no fuese letra, número, punto o guión. Después de mucho pensar como hacerlo y preguntarle a google y a https://duckduckgo.com/, encontré la manera de hacerlo con Like y el carácter comodín ^.
El código para detectar si una cadena tiene algún carácter diferente de los válidos, es decir, números, letras, punto y guión, es el siguiente:
Declare @texto as nvarchar(256)
Declare @str Varchar(128)
--Si el texto tiene algún caracter diferente de los que
-- están en el varchar, usando como carácter de
-- escape el | se marca como "NO válido"
-- Para indicar que busque cualquier carácter que no
-- está en el varchar se usa ^ -> no esté
-- y [] -> Rango de caracteres
Declare @str Varchar(128)
Declare @i int
Declare @valido int
Set @valido = 1
Set @str1 = ''
Set @i = 48
--Añade al varchar todos los números (ascii del 48 al 57)
-- separados por un |
While @i <= 57
Begin
Set @str = @str + '|' + Char(@i)
Set @i = @i + 1
End
Set @i = 97
--Añade al varchar todas las letras en minúsculas
-- (ascii del 97 al 122)
separados por un |While @i <= 122
Begin
Set @str = @str + '|' + Char(@i)
Set @i = @i + 1
End
--Añade al varchar el punto y el guión
Set @str = @str + '|.'
Set @str = @str + '|-'
--Si el texto tiene algún caracter diferente de los que
-- están en el varchar, usando como carácter de
-- escape el | se marca como "NO válido"
-- Para indicar que busque cualquier carácter que no
-- está en el varchar se usa ^ -> no esté
-- y [] -> Rango de caracteres
If @texto Like '%[^' + @str + ']%' escape '|'
Begin
Set @valido = '0'
End
No hay comentarios:
Publicar un comentario