Qual é a maneira mais limpa de validar um endereço de e-mail inserido por um usuário no iOS 2.0?
NOTA : Esta é uma pergunta histórica que é específica para o iOS 2.0 e, devido à sua idade, e quantas outras perguntas estão vinculadas a ele, ela não pode ser retirada e NÃO DEVE ser alterada para uma pergunta "moderna".
cocoa-touch
email-validation
iphone-sdk-2
Marcus S. Zarra
fonte
fonte
NSDataDetector
para validar endereços de email: stackoverflow.com/a/23547905/257550Respostas:
A resposta para Usar uma expressão regular para validar um endereço de email explica detalhadamente que a gramática especificada na RFC 5322 é muito complicada para expressões regulares primitivas.
Eu recomendo uma abordagem real do analisador como o MKEmailAddress .
Como solução rápida para expressões regulares, veja esta modificação de DHValidation :
fonte
@"[^@]+@[^.@]+(\\.[^.@]+)+"
Se você precisar verificar um endereço de email, envie uma mensagem para ele e veja se é bem-sucedido. Você nunca a verificará com nenhum nível de precisão apenas com uma regex, portanto, é melhor não irritar os usuários e perder inscrições por causa de uma regex desnecessariamente estrita.Leia o RFC. Quase todo mundo que pensa que sabe analisar / limpar / validar um endereço de email está errado.
http://tools.ietf.org/html/rfc2822 A seção 3.4.1 é muito útil. Aviso prévio
Sim, isso significa que +, ', etc são todos legítimos.
fonte
A melhor solução que encontrei até agora (e a que acabei usando) é adicionar o RegexKitLite ao projeto que dá acesso a expressões regulares por meio das categorias NSString.
É muito simples adicionar ao projeto e, uma vez implementada, qualquer lógica de validação de email de expressão regular funcionará.
fonte
Um bom começo é decidir o que você deseja e não deseja aceitar como endereço de email?
99% dos endereços de e-mail são assim: [email protected] ou [email protected]
No entanto, é tecnicamente legal ter um endereço de email como este: f
!#$%&'*+-/=?^_
{|} ~ "ha!" @ ComProvavelmente, existem apenas alguns e-mails válidos no mundo para domínios de nível superior, e quase ninguém usa a maioria desses outros caracteres (especialmente aspas e backticks); portanto, você pode assumir que tudo isso é inválido. Mas você deve fazê-lo como uma decisão consciente.
Além disso, faça o que Paulo diz e tente combinar a entrada com uma expressão regular como esta: ^ [A-Z0-9 ._% + -] + @ [A-Z0-9 .-] +. [AZ] { 2,} $
Esse corresponderá ao endereço de e-mail de todos.
fonte
Embora o foco nas expressões regulares seja bom, este é apenas um primeiro e necessário passo. Existem outras etapas que também precisam ser consideradas para uma boa estratégia de validação.
Duas coisas em cima da minha cabeça são:
Validação de DNS para garantir que o domínio realmente exista.
Após a validação do DNS, você também pode optar por fazer uma validação smtp. envie uma chamada para o servidor smtp para ver se o usuário realmente existe.
Dessa forma, você pode detectar todos os tipos de erros do usuário e garantir que seja um email válido.
fonte
Essa função é simples e ainda verifica o endereço de email mais detalhadamente. Por exemplo, de acordo com a RFC2822, um endereço de e-mail não deve conter dois períodos seguidos, como firstname..lastname @ domain..com
Também é importante usar âncoras em expressões regulares, como visto nesta função. Sem âncoras, o seguinte endereço de email é considerado válido: primeiro; nome) sobrenome@domínio.com (blá porque a seção sobrenome@domínio.com é válida, ignorando primeiro; nome) no início e (blá no final. mecanismo de expressões regulares para validar todo o email.
Essa função usa NSPredicate, que não existe no iOS 2. Infelizmente, pode não ajudar o solicitante, mas espero que ajude outras pessoas com as versões mais recentes do iOS. As expressões regulares nesta função ainda podem ser aplicadas ao RegExKitLite no iOS 2. E para aqueles que usam o iOS 4 ou posterior, essas expressões regulares podem ser implementadas com o NSRegularExpression.
Consulte validar endereço de email usando expressão regular em Objective-C .
fonte
fonte
Descobri que o uso de uma expressão regular funciona muito bem para validar um endereço de email.
A principal desvantagem das expressões regulares, é claro, é a manutenção, portanto, comente como você nunca comentou antes. Eu prometo a você, se não o desejar, o fará quando voltar à expressão depois de algumas semanas.
Aqui está um link para uma boa fonte, http://www.regular-expressions.info/email.html .
fonte
Desenterrando a sujeira, mas acabei encontrando o SHEmailValidator, que faz um trabalho perfeito e tem uma interface agradável.
fonte
Muitos sites fornecem RegExes, mas é bom aprendê-los e compreendê-los, além de verificar se o que você quer fazer atende às suas necessidades na RFC oficial para formatos de endereço de email.
Para aprender RegEx, idiomas interpretados podem ser um ótimo simplificador e ambiente de teste. O Rubular é baseado no Ruby, mas é uma boa maneira rápida de testar e verificar: http://www.rubular.com/
Além disso, compre a última edição do livro O'Reilly, Mastering Regular Expressions. Você vai querer gastar tempo para entender os primeiros 3 ou 4 capítulos. Tudo o que se seguirá estará desenvolvendo conhecimentos sobre o uso RegEx altamente otimizado.
Freqüentemente, uma série de RegExes menores e mais fáceis de gerenciar são mais fáceis de manter e depurar.
fonte
Aqui está uma extensão de String que valida um email no Swift.
Copiado da resposta para: Verifique se um endereço de email é válido no iOS
fonte
NSPredicate
no iOS 2.0Você não deve tentar usar o regex para validar um email. Com os TLDs sempre em mudança, seu validador é incompleto ou impreciso. Em vez disso, você deve aproveitar as
NSDataDetector
bibliotecas da Apple, que receberão uma string e tentarão ver se existem campos de dados conhecidos (e-mails, endereços, datas, etc.). O SDK da Apple fará o trabalho pesado de manter-se atualizado com os TLDs e você poderá pegar carona nos esforços deles! :)Além disso, se o iMessage (ou qualquer outro campo de texto) não achar que é um email, considere um email?
Eu coloquei essa função em uma
NSString
categoria, então a string que você está testando éself
.ou como uma
String
extensão rápidafonte
validate email objective-c
, essa pergunta é o terceiro resultado. Algumas coisas na internet não envelhecem. :-)NSDataDetector
NÃO existia no iOS 2.0, que é o que esta questão foi / é sobre.fonte
NSPredicate
não existia no iOS 2; não foi adicionado até iOS 3.