lunes, 4 de marzo de 2013

Búsqueda de caracteres no alfanuméricos en Sql

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)
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