Вопрос проверяет умение валидировать пользовательский ввод и учитывать UX-аспекты.
Email обычно валидируют с помощью регулярного выражения или NSDataDetector. Проверка не должна быть слишком строгой. Важно валидировать ввод постепенно, а не только при отправке формы. Ошибки нужно показывать пользователю аккуратно. Серверная валидация все равно остается обязательной.
Валидация email — это баланс между технической корректностью и удобством пользователя.
Формально стандарт email очень сложный, но на практике используется упрощенная проверка.
Цель:
отсеять явно некорректный ввод;
не блокировать редкие, но допустимые адреса.
Перед выбором подхода важно решить, когда выполняется проверка.
Самый распространенный вариант.
Пример:
let pattern = "^[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$"
let isValid = NSPredicate(format: "SELF MATCHES %@", pattern).evaluate(with: email)
Плюсы:
Простота.
Контроль формата.
Минусы:
сложно покрыть все валидные кейсы.
Более «системный» способ.
Пример:
let detector = try? NSDataDetector(types: NSTextCheckingResult.CheckingType.link.rawValue)
let matches = detector?.matches(in: email, options: [], range: NSRange(location: 0, length: email.count))
let isValid = matches?.first?.url?.scheme == "mailto"
Важно учитывать:
Не показывать ошибку при каждом символе.
Подсвечивать ошибку после окончания ввода.
Давать понятное сообщение, а не «invalid input».
На клиенте — для UX.
На сервере — для безопасности и целостности данных.
Для iOS достаточно легкой проверки через regex или NSDataDetector. Не стоит делать валидацию слишком строгой — сервер все равно должен быть финальной точкой проверки.