Validação de email em Swift: por que é importante e como não errar em 2025
\nOlá, desenvolvedor! Se você já escreveu um formulário de registro ou uma tela de login no iOS, certamente já enfrentou a tarefa: "Como verificar se o usuário digitou um email real, e não 'qwerty@'?" A pergunta é tão popular que no Stack Overflow acumulou milhares de visualizações — e não é à toa. Em 2025, quando os usuários esperam máxima velocidade e conveniência dos aplicativos, uma validação incorreta pode levar à perda de clientes.
\nNeste artigo, vamos analisar as melhores práticas de validação de email em Swift. Você aprenderá como não reinventar a roda, por que expressões regulares nem sempre são a solução, e como usar os recursos da Apple para manter o código limpo e confiável. Vamos lá!
\n\nPor que a validação de email é uma dor de cabeça?
\nParece simples, não? Pegue uma expressão regular, verifique o formato — e pronto. Mas o diabo está nos detalhes. Endereços de email podem conter pontos, sinais de mais, caracteres especiais e até caracteres não latinos (domínios internacionalizados). Se você criar uma validação muito rigorosa, bloqueará endereços legítimos. Se for muito fraca, deixará passar lixo.
\nEm 2025, os padrões RFC 5321 e RFC 5322 ainda são relevantes, mas na prática raramente validamos email 100% — geralmente é suficiente capturar erros óbvios (falta de @, espaços, domínio inválido). A regra principal: a melhor validação é enviar um email de confirmação. No entanto, na etapa de entrada, ainda queremos dar ao usuário um feedback instantâneo.
\n\nMétodo 1: Expressões Regulares (Regex) — o clássico
\nA maneira mais comum é usar uma expressão regular. Em Swift, isso é feito com NSRegularExpression ou métodos internos de string. Vamos ver um exemplo funcional.
import Foundation\n\nfunc isValidEmail(_ email: String) -> Bool {\n // Expressão regular simples, mas eficaz\n let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\\\.[A-Za-z]{2,64}"\n let emailPredicate = NSPredicate(format: "SELF MATCHES %@", emailRegex)\n return emailPredicate.evaluate(with: email)\n}\n\n// Exemplo de uso\nprint(isValidEmail("hello@pythonlib.ru")) // true\nprint(isValidEmail("invalid-email")) // false\n\n\nVantagens: rápido, claro, fácil de manter.
\nDesvantagens: não considera domínios internacionalizados (IDN) e alguns caracteres especiais legais. Para 95% dos projetos, isso é suficiente, mas se você está desenvolvendo um aplicativo internacional — continue lendo.
\n\nRegex aprimorado para 2025
\nSe quiser estar um passo à frente, use uma expressão que suporte os padrões modernos:
\n\nfunc isValidEmailStrict(_ email: String) -> Bool {\n // Padrão mais rigoroso baseado no RFC 5322 (simplificado)\n let strictRegex = "(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\\"(?:[\\\\x01-\\\\x08\\\\x0b\\\\x0c\\\\x0e-\\\\x1f\\\\x21\\\\x23-\\\\x5b\\\\x5d-\\\\x7f]|\\\\\\\\[\\\\x01-\\\\x09\\\\x0b\\\\x0c\\\\x0e-\\\\x7f])*\\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\\\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\\\\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\\\\x01-\\\\x08\\\\x0b\\\\x0c\\\\x0e-\\\\x1f\\\\x21-\\\\x5a\\\\x53-\\\\x7f]|\\\\\\\\[\\\\x01-\\\\x09\\\\x0b\\\\x0c\\\\x0e-\\\\x7f])+)\\\\])"\n return NSPredicate(format: "SELF MATCHES %@", strictRegex).evaluate(with: email.lowercased())\n}\n\n\nObserve: esta expressão suporta endereços IP entre colchetes e aspas. Mas use com cuidado — pode ser excessiva para projetos simples.
\n\nMétodo 2: NSDataDetector — validação da Apple
\nSabia que o iOS tem um detector de dados embutido? Ele consegue reconhecer emails, links, telefones e datas. E isso não requer expressões regulares. Muito útil