Ecco la soluzione ragionevole:
"LA SOLUZIONE RAGIONEVOLE"
Utilizzato e testato per anni in molte app di grandi volumi.
1 - evita i molti terribili errori regex che vedi spesso in questi suggerimenti
2 - NON consente e-mail stupide come "x @ x" che si ritiene siano valide in determinati RFC, ma sono completamente stupide, non possono essere utilizzate come e-mail e che il personale di supporto rifiuterà all'istante, e che tutti i servizi di mailer (mailchimp, google, aws, ecc.) semplicemente rifiutano. Se (per qualche motivo) hai bisogno di una soluzione che consenta stringhe come 'x @ x', usa un'altra soluzione.
3 - il codice è molto, molto, molto comprensibile
4 - è KISS, affidabile e testato fino alla distruzione su app commerciali con un numero enorme di utenti
5 - un punto tecnico, il predicato è un globale, come Apple dice che dovrebbe essere (attenzione ai suggerimenti di codice che non hanno questo)
let __firstpart = "[A-Z0-9a-z]([A-Z0-9a-z._%+-]{0,30}[A-Z0-9a-z])?"
let __serverpart = "([A-Z0-9a-z]([A-Z0-9a-z-]{0,30}[A-Z0-9a-z])?\\.){1,5}"
let __emailRegex = __firstpart + "@" + __serverpart + "[A-Za-z]{2,8}"
let __emailPredicate = NSPredicate(format: "SELF MATCHES %@", __emailRegex)
extension String {
func isEmail() -> Bool {
return __emailPredicate.evaluate(with: self)
}
}
extension UITextField {
func isEmail() -> Bool {
return self.text!.isEmail()
}
}
È così facile
Spiegazione:
Nella seguente descrizione, "OC" significa carattere ordinario - una lettera o una cifra.
__firstpart ... deve iniziare e terminare con un OC. Per i personaggi nel mezzo puoi avere alcuni caratteri come il trattino basso, ma l' inizio e la fine devono essere un OC. (Tuttavia, va bene avere un solo OC e basta, ad esempio: j@blah.com)
__serverpart ... Hai sezioni come "blah". quale ripetere . (Quindi tipo di cosa mail.city.fcu.edu.) Le sezioni devono iniziare e terminare con un OC, ma al centro puoi anche avere un trattino "-". (Se vuoi consentire altri caratteri insoliti lì dentro, forse il trattino basso, aggiungi semplicemente prima del trattino.) Va bene avere una sezione che è solo un OC. (Come in joe@w.campus.edu) È possibile avere fino a cinque sezioni, è necessario avere uno. Finalmente il TLD (ad esempio .com) è strettamente 2 a 8 in formato . Ovviamente, cambia semplicemente "8" come preferisci dal tuo dipartimento di supporto.
IMPORTANTE!
È necessario mantenere il predicato come globale, non crearlo ogni volta.
Nota che questa è la prima cosa che Apple menziona sull'intero problema nei documenti.
È molto sorprendente quando vedi suggerimenti che non memorizzano nella cache il predicato.