Вот разумное решение:
"РАЗУМНОЕ РЕШЕНИЕ"
Используется и проверяется годами во многих приложениях огромного объема.
1 - это позволяет избежать многих ужасных ошибок регулярных выражений, которые вы часто видите в этих предложениях
2 - он НЕ допускает глупые электронные письма, такие как «x @ x», которые считаются действительными в определенных RFC, но совершенно глупы, не могут использоваться в качестве электронных писем, и которые ваши сотрудники службы поддержки будут отклонять немедленно, и которые все почтовые сервисы (mailchimp, google, aws и т. д.) просто отклоняются. Если (по какой-то причине) вам нужно решение, которое допускает такие строки, как 'x @ x', используйте другое решение.
3 - код очень и очень понятен
4 - это KISS, надежный и проверенный на разрушение в коммерческих приложениях с огромным количеством пользователей
5 - техническая точка зрения, предикат является глобальным, как Apple утверждает, что это должно быть (следите за предложениями кода, у которых этого нет)
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()
}
}
Это так просто.
Объяснение:
В последующем описании «OC» означает обычный символ - букву или цифру.
__firstpart ... должен начинаться и заканчиваться OC. Для символов в середине у вас могут быть определенные символы, такие как подчеркивание, но начало и конец должны быть OC. (Однако это нормально , чтобы иметь только одну ОС , и это его, например: j@blah.com)
__serverpart ... У вас есть такие разделы, как "бла". которые повторяют . (Так что типа mail.city.fcu.edu.) Разделы должны начинаться и заканчиваться OC, но в середине вы также можете иметь тире "-". (Если вы хотите, чтобы другие необычные символы были там, возможно, подчеркивание, просто добавьте перед чертой.) Хорошо иметь раздел, который является только одним OC. (Как в joe@w.campus.edu) У вас может быть до пяти разделов, у вас должен быть один. Наконец, TLD (например, .com) строго от 2 до 8 дюймов размер. Очевидно, просто измените эту цифру «8», как предпочитает ваша служба поддержки.
ВАЖНЫЙ !
Вы должны хранить предикат как глобальный, не создавайте его каждый раз.
Обратите внимание, что это первое, что Apple упоминает о всей проблеме. в документации.
Это очень удивительно, когда вы видите предложения, которые не кэшируют предикат.