Validando emails com o SQL Server
Aprenda a validar e-mails utilizando o SQL Server
A validação de e-mails é algo que deve ser feito do lado da aplicação, mas, podemos ter casos onde recebemos um banco de dados que tem e-mails inválidos. Vamos ver neste artigo como fazer a validação de e-mails usando SQL Server.
Como fazer a limpeza de dados?
A primeira coisa a fazer é identificar quais seriam os e-mails incorretos. Vamos criar uma query, mas, precisamos definir certas regras. Um e-mail correto é aquele que atende as seguintes condições:
1 - Não possui espaços em branco
2 - O "@" não é o primeiro caractere.
3 - O "." não é o último caractere.
4 - Deve existir um "." depois da "@".
5 - Apenas deve existir uma "@" por e-mail
6 - O nome de domínio deve ter pelo menos 2 caracteres, e finalmente
7 - Não devem existir padrões como ".@" e ".."
Para montar a nossa query, vamos combinar as seguintes funções:
CHARINDEX - Localiza a posição de um determinado caractere.
LTRIM - Apaga espaços em branco no começo.
RTRIM - Apaga espaços em branco no final.
LEFT - Seleciona uma determina quantidade da caracteres a partir da esquerda.
RIGHT - Seleciona uma determina quantidade da caracteres a partir da direita.
LEN - Conta a quantidade de caracteres.
REPLACE - Substitui um determinado caractere.
REVERSE - Inverte os caracteres.
A nossa query para selecionar e-mails inválidos vai ficar da seguinte forma:
SELECT *
FROM minha_tabela
WHERE NOT
(
CHARINDEX(' ',LTRIM(RTRIM([Email]))) = 0 --(1)
AND LEFT(LTRIM([Email]),1) <> '@' --(2)
AND RIGHT(RTRIM([Email]),1) <> '.' --(3)
AND CHARINDEX('.',[Email],CHARINDEX('@',[Email])) - CHARINDEX('@',[Email]) > 1 -- (4)
AND LEN(LTRIM(RTRIM([Email]))) - LEN(REPLACE(LTRIM(RTRIM([Email])),'@','')) = 1 -- (5)
AND CHARINDEX('.',REVERSE(LTRIM(RTRIM([Email])))) >= 3 -- (6)
AND (CHARINDEX('.@',[Email]) = 0 AND CHARINDEX('..',[Email]) = 0) -- (7)
)
Os números entre parênteses se referem a lista numerada com as validações.
Você também pode inserir uma regra na sua tabela para bloquear a inserção de e-mails no formato inválido, caso não seja possível inserir esta regra no frontend de sua aplicação. Para inserir esta restrição (constraint), você pode fazer da seguinte forma:
ALTER TABLE [dbo].[minha_tabela]
WITH CHECK ADD
CONSTRAINT [ValidarEmail]
CHECK
(
CHARINDEX(' ',LTRIM(RTRIM([Email]))) = 0 -- (1)
AND LEFT(LTRIM([Email]),1) <> '@' -- (2)
AND RIGHT(RTRIM([Email]),1) <> '.' -- (3)
AND CHARINDEX('.',[Email],CHARINDEX('@',[Email])) - CHARINDEX('@',[Email]) > 1 -- (4)
AND LEN(LTRIM(RTRIM([Email]))) - LEN(REPLACE(LTRIM(RTRIM([Email])),'@','')) = 1 -- (5)
AND CHARINDEX('.',REVERSE(LTRIM(RTRIM([Email])))) >= 3 -- (6)
AND (CHARINDEX('.@',[Email]) = 0 AND CHARINDEX('..',[Email]) = 0) -- (7)
)
GO