Ось розумне рішення:
"РОЗУМНИЙ РІШЕННЯ"
Використовується і тестується роками у багатьох додатках з величезним обсягом.
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. (Однак нормально мати лише одну OC, і це все, наприклад: j@blah.com)
__serverpart ... У вас є розділи на кшталт "бла". які повторюються . (Отже, тип речі. Mail.city.fcu.edu.) Розділи повинні починатися і закінчуватися OC, але в середині ви також можете мати тире "-". (Якщо ви хочете там дозволити інших незвичайних символів, можливо, підкреслити, просто додайте перед тире.) Добре мати розділ, який є лише одним OC. (Як у joe@w.campus.edu) У вас може бути до п'яти розділів, ви повинні мати один. Нарешті, розмір TLD (наприклад, .com) має розмір строго від 2 до 8. Очевидно, просто змініть цю "8", як бажає ваш відділ підтримки.
ВАЖЛИВО!
Ви повинні зберігати присудок як глобальний, не будувати його кожного разу.
Зауважте, що це перше, що Apple згадує про всю проблему в документах.
Це дуже дивно, коли ви бачите пропозиції, які не кешують присудок.