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.

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

 

 

Quer conferir mais dicas sobre banco de dados? Clique aqui e veja mais dicas!