Oto rozsądne rozwiązanie:
„ROZSĄDNE ROZWIĄZANIE”
Używany i testowany od lat w wielu aplikacjach o dużej objętości.
1 - pozwala uniknąć wielu strasznych błędów wyrażenia regularnego, które często widujesz w tych sugestiach
2 - NIE zezwala na głupie wiadomości e-mail, takie jak „x @ x”, które są uważane za prawidłowe w niektórych RFC, ale są całkowicie głupie, nie mogą być używane jako wiadomości e-mail, a które pracownicy wsparcia natychmiast odrzucą, i które wszystkie usługi pocztowe (mailchimp, google, aws itp.) po prostu odrzucają. Jeśli (z jakiegoś powodu) potrzebujesz rozwiązania, które pozwala na takie ciągi znaków jak „x @ x”, użyj innego rozwiązania.
3 - kod jest bardzo, bardzo, bardzo zrozumiały
4 - jest KISS, niezawodny i przetestowany do zniszczenia w aplikacjach komercyjnych z ogromną liczbą użytkowników
5 - kwestia techniczna, predykat jest globalny, jak twierdzi Apple , powinien (uważaj na sugestie kodu, które tego nie mają)
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()
}
}
To takie proste.
Wyjaśnienie:
W poniższym opisie „OC” oznacza zwykły znak - literę lub cyfrę.
__firstpart ... musi zaczynać się i kończyć OC. Dla znaków pośrodku możesz mieć pewne znaki, takie jak podkreślnik, ale początek i koniec muszą być OC. (Jednakże, jest to ok mieć tylko jedno OC i to, na przykład: j@blah.com)
__serverpart ... Masz sekcje takie jak „bla”. które powtarzają się . (A więc mail.city.fcu.edu.) Sekcje muszą zaczynać się i kończyć OC, ale w środku możesz też wstawić myślnik „-”. (Jeśli chcesz, aby inne nietypowe znaki tam, być może podkreślenia, wystarczy dodać przed myślnikiem). Jest OK , aby mieć sekcję, która jest tylko jeden OC. (Jak w joe@w.campus.edu) Można mieć maksymalnie pięć części, to trzeba mieć. Wreszcie TLD (takie jak .pl) jest ściśle 2 do 8 rozmiaru. Oczywiście po prostu zmień „8” na preferowaną przez dział wsparcia.
WAŻNE!
Musisz zachować predykat jako globalny, nie buduj go za każdym razem.
Zauważ, że jest to pierwsza rzecz, którą Apple wspomina o całym problemie w dokumentacji.
To bardzo zaskakujące, gdy zobaczysz sugestie, które nie buforują predykatu.