Apa cara terbersih untuk memvalidasi alamat email yang dimasukkan pengguna di iOS 2.0?
CATATAN : Ini adalah pertanyaan historis yang khusus untuk iOS 2.0 dan karena usianya dan berapa banyak pertanyaan lain yang dikaitkan dengannya, ia tidak dapat dibatalkan dan TIDAK HARUS diubah menjadi pertanyaan "modern".
cocoa-touch
email-validation
iphone-sdk-2
Marcus S. Zarra
sumber
sumber
NSDataDetector
untuk memvalidasi alamat email: stackoverflow.com/a/23547905/257550Jawaban:
Jawaban untuk Menggunakan ekspresi reguler untuk memvalidasi alamat email menjelaskan dengan sangat rinci bahwa tata bahasa yang ditentukan dalam RFC 5322 terlalu rumit untuk ekspresi reguler primitif.
Saya merekomendasikan pendekatan pengurai nyata seperti MKEmailAddress .
Sebagai solusi ekspresi reguler cepat, lihat modifikasi DHValidation ini :
sumber
@"[^@]+@[^.@]+(\\.[^.@]+)+"
Jika Anda perlu memverifikasi alamat email, kirimkan pesan kepadanya dan lihat apakah berhasil. Anda tidak akan pernah memverifikasinya dengan tingkat akurasi apa pun hanya dengan regex, jadi sebaiknya jangan kencing pengguna dan kehilangan pendaftaran karena regex ketat yang tidak perlu.Baca RFC. Hampir semua orang yang mengira mereka tahu cara mengurai / membersihkan / memvalidasi alamat email salah.
http://tools.ietf.org/html/rfc2822 Bagian 3.4.1 sangat berguna. Memperhatikan
Ya, itu berarti +, ', dll semuanya sah.
sumber
Solusi terbaik yang saya temukan sejauh ini (dan yang akhirnya saya ikuti) adalah menambahkan RegexKitLite ke proyek yang memberikan akses ke ekspresi reguler melalui NSString Categories.
Sangat mudah untuk menambahkan ke proyek dan sekali di tempat, salah satu logika validasi email ekspresi reguler akan bekerja.
sumber
Awal yang baik adalah memutuskan apa yang Anda dan Anda tidak ingin terima sebagai alamat email?
99% dari alamat email terlihat seperti ini: [email protected] atau [email protected]
Namun, secara teknis sah memiliki alamat email seperti ini: f
!#$%&'*+-/=?^_
{|} ~ "ha!" @ ComMungkin hanya ada segelintir email yang valid di dunia untuk domain tingkat atas, dan hampir tidak ada yang menggunakan sebagian besar karakter lain (terutama kutipan dan backticks), jadi Anda mungkin ingin berasumsi bahwa ini semua adalah hal yang tidak valid untuk dilakukan. Tetapi Anda harus melakukannya sebagai keputusan sadar.
Di luar itu, lakukan apa yang dikatakan Paul dan cobalah untuk mencocokkan input ke ekspresi reguler seperti ini: ^ [A-Z0-9 ._% + -] + @ [A-Z0-9 .-] +. [AZ] { 2,} $
Yang itu akan cocok dengan alamat email semua orang.
sumber
Meskipun fokus pada ekspresi reguler baik, tetapi ini hanya langkah pertama dan perlu. Ada langkah-langkah lain yang juga perlu diperhitungkan untuk strategi validasi yang baik.
Dua hal di atas kepala saya adalah:
Validasi DNS untuk memastikan domain benar-benar ada.
Setelah validasi dns, Anda juga dapat memilih untuk melakukan validasi smtp. mengirim panggilan ke server smtp untuk melihat apakah pengguna benar-benar ada.
Dengan cara ini Anda dapat menangkap semua jenis kesalahan pengguna dan memastikan itu adalah email yang valid.
sumber
Fungsi ini sederhana namun memeriksa alamat email lebih teliti. Misalnya, menurut RFC2822 alamat email tidak boleh berisi dua periode berturut-turut, seperti nama depan..lastname @ domain..com
Penting juga untuk menggunakan jangkar dalam ekspresi reguler seperti yang terlihat dalam fungsi ini. Tanpa jangkar, alamat email berikut ini dianggap valid: pertama; nama) [email protected] (bla karena bagian [email protected] valid, abaikan dulu; nama) di awal dan (bla pada akhirnya. Jangkar memaksa mesin ekspresi reguler untuk memvalidasi seluruh email.
Fungsi ini menggunakan NSPredicate yang tidak ada di iOS 2. Sayangnya itu mungkin tidak membantu penanya, tetapi mudah-mudahan akan membantu orang lain dengan versi iOS yang lebih baru. Ekspresi reguler dalam fungsi ini masih dapat diterapkan ke RegExKitLite di iOS 2. Dan bagi mereka yang menggunakan iOS 4 atau lebih baru, ekspresi reguler ini dapat diimplementasikan dengan NSRegularExpression.
Lihat memvalidasi alamat email menggunakan ekspresi reguler di Objective-C .
sumber
sumber
Saya telah menemukan bahwa menggunakan ekspresi reguler berfungsi sangat baik untuk memvalidasi alamat email.
Kelemahan utama untuk ekspresi reguler tentu saja adalah rawatan, jadi komentar seperti Anda belum pernah berkomentar sebelumnya. Saya berjanji kepada Anda, jika tidak, Anda akan berharap Anda melakukannya ketika Anda kembali ke ekspresi setelah beberapa minggu.
Berikut ini tautan ke sumber yang bagus, http://www.regular-expressions.info/email.html .
sumber
Menggali tanah, tapi saya hanya menemukan SHEmailValidator yang melakukan pekerjaan sempurna dan memiliki antarmuka yang bagus.
sumber
Banyak situs web menyediakan RegExes tetapi Anda sebaiknya mempelajari dan memahaminya serta memverifikasi apa yang Anda inginkan memenuhi kebutuhan Anda dalam RFC resmi untuk format alamat email.
Untuk mempelajari RegEx, bahasa yang ditafsirkan dapat menjadi penyederhanaan dan testbed yang bagus. Rubular dibangun di atas Ruby, tetapi cara cepat yang baik untuk menguji dan memverifikasi: http://www.rubular.com/
Di luar itu, beli edisi terbaru buku O'Reilly Menguasai Ekspresi Reguler. Anda akan ingin meluangkan waktu untuk memahami 3 atau 4 bab pertama. Semuanya setelah itu akan membangun keahlian pada penggunaan RegEx yang sangat dioptimalkan.
Seringkali serangkaian RegExes yang lebih kecil dan lebih mudah dikelola lebih mudah dikelola dan didebug.
sumber
Berikut ini adalah ekstensi dari String yang memvalidasi email di Swift.
Disalin dari jawaban untuk: Periksa apakah alamat email itu valid di iOS
sumber
NSPredicate
di iOS 2.0Anda seharusnya tidak mencoba menggunakan regex untuk memvalidasi email. Dengan TLD yang terus berubah, validator Anda tidak lengkap atau tidak akurat. Sebaliknya, Anda harus memanfaatkan
NSDataDetector
perpustakaan Apple yang akan mengambil string dan mencoba untuk melihat apakah ada bidang data yang diketahui (email, alamat, tanggal, dll). SDK Apple akan melakukan banyak hal untuk tetap mengikuti perkembangan TLD dan Anda dapat mendukung upaya mereka !! :)Selain itu, jika iMessage (atau bidang teks lainnya) tidak menganggapnya sebagai email, haruskah Anda mempertimbangkan email?
Saya menempatkan fungsi ini dalam
NSString
kategori, jadi string yang Anda uji adalahself
.atau sebagai
String
ekstensi cepatsumber
validate email objective-c
, pertanyaan ini adalah hasil ketiga. Beberapa hal di internet tidak menua. :-)NSDataDetector
TIDAK ada di iOS 2.0 yang merupakan pertanyaan ini.sumber
NSPredicate
tidak ada di iOS 2; itu tidak ditambahkan sampai iOS 3.