Inilah solusi yang masuk akal:
"SOLUSI YANG WAJAR"
Digunakan dan diuji selama bertahun-tahun di banyak aplikasi volume besar.
1 - itu menghindari banyak kesalahan regex mengerikan yang sering Anda lihat dalam saran ini
2 - TIDAK mengizinkan email bodoh seperti "x @ x" yang dianggap valid di bawah RFC tertentu, tetapi benar-benar konyol, tidak dapat digunakan sebagai email, dan staf pendukung Anda akan langsung menolak, dan yang semuanya layanan mailer (mailchimp, google, aws, dll) cukup ditolak. Jika (karena alasan tertentu) Anda membutuhkan solusi yang memungkinkan string seperti 'x @ x', gunakan solusi lain.
3 - kode ini sangat, sangat, sangat bisa dimengerti
4 - ini KISS, dapat diandalkan, dan diuji untuk penghancuran pada aplikasi komersial dengan jumlah pengguna yang sangat besar
5 - poin teknis, predikatnya adalah global, seperti yang dikatakan Apple (perhatikan saran kode yang tidak memiliki ini)
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()
}
}
Sangat mudah.
Penjelasan:
Dalam uraian berikut, "OC" berarti karakter biasa - huruf atau angka.
__firstpart ... harus memulai dan mengakhiri dengan OC. Untuk karakter di tengah Anda dapat memiliki karakter tertentu seperti garis bawah, tetapi awal dan akhir harus menjadi OC. (Namun, tidak apa - apa memiliki hanya satu OC dan hanya itu, misalnya: j@blah.com)
__serverpart ... Anda memiliki bagian seperti "bla." yang berulang . (Jadi jenis mail.city.fcu.edu.) Bagian harus dimulai dan diakhiri dengan OC, tetapi di tengah Anda juga dapat memiliki tanda hubung "-". (Jika Anda ingin mengizinkan karakter tidak biasa lainnya di sana, mungkin garis bawah, cukup tambahkan sebelum tanda hubung.) Tidak apa - apa untuk memiliki bagian yang hanya satu OC. (Seperti dalam joe@w.campus.edu) Anda dapat memiliki hingga lima bagian, Anda harus memiliki satu. Akhirnya TLD (seperti .com) secara ketat 2-8 di ukuran . Jelas, ubah saja "8" itu seperti yang disukai oleh departemen dukungan Anda.
PENTING !
Anda harus mempertahankan predikat sebagai global, jangan membangunnya setiap saat.
Perhatikan bahwa ini adalah hal pertama yang Apple sebutkan tentang keseluruhan masalah dalam dokumen.
Sangat mengejutkan ketika Anda melihat saran yang tidak menyembunyikan predikat.