นี่คือทางออกที่สมเหตุสมผล:
"ทางออกที่เหมาะสม"
ใช้และทดสอบมานานหลายปีในแอปมากมายที่มีปริมาณมาก
1 - หลีกเลี่ยงข้อผิดพลาด regex ที่น่ากลัวมากมายที่คุณมักจะเห็นในคำแนะนำเหล่านี้
2 - ไม่อนุญาตให้ใช้อีเมลที่โง่เช่น "x @ x" ซึ่งคิดว่าถูกต้องภายใต้ RFC บางตัว แต่มันโง่มากไม่สามารถใช้เป็นอีเมลได้และพนักงานฝ่ายสนับสนุนของคุณจะปฏิเสธทันที บริการจดหมาย (mailchimp, google, aws ฯลฯ ) เพียงปฏิเสธ หาก (ด้วยเหตุผลบางอย่าง) คุณต้องการโซลูชันที่อนุญาตให้ใช้สตริงเช่น 'x @ x' ให้ใช้โซลูชันอื่น
3 - รหัสนั้นมากมาก ๆ เป็นที่เข้าใจได้มาก
4 - เป็น KISS เชื่อถือได้และทดสอบเพื่อทำลายแอพเชิงพาณิชย์ที่มีผู้ใช้จำนวนมาก
5 - จุดเทคนิคการวินิจฉัยเป็นทั่วโลกเช่นแอปเปิ้ลกล่าวว่ามันควรจะเป็น (ดูออกสำหรับข้อเสนอแนะรหัสซึ่งไม่ได้นี้)
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" หมายถึงอักขระธรรมดา - ตัวอักษรหรือตัวเลข
__ ก่อนอื่น ... ต้องเริ่มต้นและจบด้วย OC สำหรับตัวละครที่อยู่ตรงกลางคุณสามารถมีตัวละครบางตัวเช่นขีดล่าง แต่จุดเริ่มต้นและจุดสิ้นสุดจะต้องเป็น OC (อย่างไรก็ตามมันก็โอเคที่จะมีเพียงหนึ่ง OC และนั่นคือตัวอย่างเช่น: j@blah.com)
__serverpart ... คุณมีส่วนต่างๆเช่น "blah" ซึ่งการทำซ้ำ (ดังนั้นประเภทของสิ่งของ mail.city.fcu.edu) ส่วนต่างๆจะต้องเริ่มต้นและสิ้นสุดด้วย OC แต่ตรงกลางคุณสามารถมีเครื่องหมายขีดกลาง "-" (หากคุณต้องการอนุญาตให้มีตัวละครที่ผิดปกติอื่น ๆในนั้นอาจขีดเส้นใต้เพียงแค่เพิ่มก่อนที่จะรีบ) มันก็โอเคที่จะมีส่วนที่เป็นเพียงหนึ่ง OC (เช่นเดียวกับ joe@w.campus.edu) คุณสามารถมีได้สูงสุดห้าส่วนคุณต้องมีหนึ่งส่วน สุดท้ายTLD (เช่น .com) เป็นอย่างเคร่งครัด 2-8 ในขนาดเห็นได้ชัดว่าเพียงแค่เปลี่ยน "8" ตามต้องการโดยแผนกสนับสนุนของคุณ
สำคัญ !
คุณต้องทำให้ภาคแสดงเป็นโลกอย่าสร้างมันทุกครั้ง
โปรดทราบว่านี่เป็นสิ่งแรกที่ Apple กล่าวถึงเกี่ยวกับปัญหาทั้งหมดในเอกสาร
มันน่าประหลาดใจมากเมื่อคุณเห็นข้อเสนอแนะที่ไม่แคชเพรดิเคต