Oi! Seja bem-vindo!
Hoje em dia, nosso e-mail uma informação tão importante e relevante quanto documentos ou nosso endereço físico. Por isso hoje vamos aprender como validar o formato de e-mails no SQL Server.
Isso impedirá que dados mal formatados ou até mesmo maliciosos sejam incluídos em suas tabelas, o que é ótimo não só como medida de segurança, mas também no sentido de evitar erros de digitação.
Como VALIDAR o FORMATO de E-MAILS no SQL Server
Há duas abordagens para validar um e-mail, via programação armazenada (ex: funções ou procedures) e via constraints (ou restrições de integridade) aplicadas diretamente a tabela do SQL. Nesse artigo optei pela restrição via constraints, pois essa é uma forma de efetivamente proteger o seu banco de dados maliciosos ou mal formatados devido a erro de digitação.
O segredo da validação está no uso de check constraints, poderíamos fazer a validação inteira usando apenas uma, porém eu prefiro desmembrar em mais de uma para ficar mais fácil de ver qual regra foi barrada quando o usuário tenta inserir um e-mail inválido.
No script inclui as regras e também comentários para você ver exatamente como cada regra valida parte do formato do e-mail. Também inclui testes no final do script, fique a vontade para criar seus próprios testes, é um ótimo exercício!
------------------------------------------------------------------ -- Como validar o formato de e-mails no SQL ------------------------------------------------------------------ -------------------------------------------------- -- Requisitos para nosso teste -------------------------------------------------- -- Banco de testes use master if db_id('curso') is not null drop database curso go create database curso go use curso go -------------------------------------------------- -- Validando e-mails via check -------------------------------------------------- -- Tabela de testes if object_id('amigos') is not null drop table amigos create table amigos ( nr int, nome varchar(100), email varchar(200), constraint ck_amigos_email01 check (email like '[a-z,0-9,_,-]%@[a-z,0-9,_,-]%.[a-z]%'), -- exige formato: [letras-numeros-underline-traço] + [qualquer coisa] + [@] + [letras-numeros-underline-traço] + [qualquer coisa] + [.] + [letras] + qualquer coisa constraint ck_amigos_email02 check (email not like '%[^a-z0-9@._-]%'), -- impede caracteres que não sejam: a-z 0-9 @ . _ - constraint ck_amigos_email03 check (email not like '%@%@%'), -- impede dois arrobas constraint ck_amigos_email04 check (email not like '%.@%'), -- impede .@ constraint ck_amigos_email05 check (email not like '%..%'), -- impede .. constraint ck_amigos_email06 check (email not like '%.') -- impede terminar com . ) -- ERRO: Formatos inválidos insert into amigos values (1, 'josue', '@teste.com') -- começando com @ insert into amigos values (1, 'josue', 'josue@teste') -- sem sufixo de domínio insert into amigos values (1, 'josue', 'jo ue@teste') -- espaço insert into amigos values (1, 'josue', 'jo"ue@teste') -- aspas insert into amigos values (1, 'josue', 'jo$ue@teste') -- caracteres especiais insert into amigos values (1, 'josue', 'josue^[email protected]') -- caracteres especiais insert into amigos values (1, 'josue', 'josue][email protected]') -- caracteres especiais insert into amigos values (1, 'josue', 'josue%[email protected]') -- caracteres especiais insert into amigos values (1, 'josue', '[email protected]') -- @. juntos insert into amigos values (1, 'josue', 'josue@@teste.com') -- 2 arrobas juntos insert into amigos values (1, 'josue', 'josue@[email protected]') -- 2 arrobas separados insert into amigos values (1, 'josue', '[email protected]') -- .@ juntos insert into amigos values (1, 'josue', '[email protected]') -- .. juntos insert into amigos values (1, 'josue', '[email protected].') -- . no final -- OK: Formatos válidos insert into amigos values (1, 'josue', '[email protected]') insert into amigos values (1, 'josue', '[email protected]') insert into amigos values (1, 'josue', '[email protected]') insert into amigos values (1, 'josue', '[email protected]') insert into amigos values (1, 'josue', '[email protected]') insert into amigos values (1, 'josue', '[email protected]') insert into amigos values (1, 'josue', '[email protected]') insert into amigos values (1, 'josue', '[email protected]') -- Excluindo dados de teste use master drop database curso
CONCLUSÃO
Como podes ver, sou um entusiasta da prevenção de problemas… kkkk se é que isso define alguma coisa… Enfim, eu gosto de que meus bancos de dados sejam “o mais blindados possível” contra mal uso ou problemas de segurança, e acho que esse tipo de abordagem ajuda significativamente.
Por essas razões, encorajo você a aplicar esse tipo de constraint não só para e-mail, mas também para outros tipos de campo texto que possam ser enquadrados em alguma regra geral.
Abraço do seu amigo Josué