Đây là giải pháp hợp lý:
"GIẢI PHÁP HỢP LÝ"
Được sử dụng và thử nghiệm trong nhiều năm trong nhiều ứng dụng khối lượng lớn.
1 - nó tránh được nhiều lỗi regex khủng khiếp mà bạn thường thấy trong các đề xuất này
2 - KHÔNG cho phép các email ngu ngốc như "x @ x" được cho là hợp lệ theo một số RFC nhất định, nhưng hoàn toàn ngớ ngẩn, không thể được sử dụng làm email và nhân viên hỗ trợ của bạn sẽ từ chối ngay lập tức và tất cả dịch vụ gửi thư (mailchimp, google, aws, v.v.) chỉ cần từ chối. Nếu (vì một số lý do) bạn cần một giải pháp cho phép các chuỗi như 'x @ x', hãy sử dụng giải pháp khác.
3 - mã rất, rất, rất dễ hiểu
4 - đó là KISS, đáng tin cậy và đã được thử nghiệm để phá hủy trên các ứng dụng thương mại với số lượng người dùng khổng lồ
5 - một điểm kỹ thuật, vị ngữ là toàn cầu, như Apple nói rằng nó phải như vậy (coi chừng các đề xuất mã không có điều này)
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()
}
}
Nó là dễ dàng.
Giải trình:
Trong mô tả sau đây, "OC" có nghĩa là ký tự bình thường - một chữ cái hoặc một chữ số.
__firstpart ... phải bắt đầu và kết thúc bằng OC. Đối với các ký tự ở giữa, bạn có thể có một số ký tự nhất định như gạch dưới, nhưng bắt đầu và kết thúc phải là một OC. (Tuy nhiên, nó ok để chỉ có một OC và đó là nó, ví dụ: j@blah.com)
__serverpart ... Bạn có các phần như "blah." mà lặp lại . (Vì vậy, loại mail.city.fcu.edu.) Các phần phải bắt đầu và kết thúc bằng OC, nhưng ở giữa, bạn cũng có thể có dấu gạch ngang "-". (Nếu bạn muốn cho phép khác nhân vật khác thường trong đó, có lẽ là dấu gạch dưới, chỉ cần thêm trước khi dấu gạch ngang.) Đó là OK để có một phần mà chỉ là một OC. (Như trong joe@w.campus.edu) Bạn có thể có tối đa năm phần, bạn phải có một phần. Cuối cùng, TLD (chẳng hạn như .com) có kích thước từ 2 đến 8. Rõ ràng, chỉ cần thay đổi "8" theo sở thích của bộ phận hỗ trợ của bạn.
QUAN TRỌNG !
Bạn phải giữ vị ngữ là toàn cầu, không xây dựng nó mỗi lần.
Lưu ý rằng đây là điều đầu tiên Apple đề cập đến toàn bộ vấn đề trong các tài liệu.
Thật đáng ngạc nhiên khi bạn thấy các đề xuất không lưu trữ vị ngữ.