Pelajaran modul (1/4)
Memvalidasi email
Memvalidasi email dengan "benar" adalah masalah yang jauh lebih sulit daripada yang terlihat: RFC 5322 adalah monster. Dalam praktiknya kami memilih pola yang cukup baik menerima kasus-kasus umum dan menolak kasus-kasus yang jelas-jelas salah.
Pattern: ^[\w.+-]+@[\w-]+(?:\.[\w-]+)+$[\w.+-]+-- bagian lokal: huruf, angka,_,.,+,-.@-- pemisah.[\w-]+(?:\.[\w-]+)+-- domain + setidaknya satu TLD dipisahkan oleh..
Apa yang diterima: mario.rossi@example.com, foo+bar@sub.example.co.uk,
user_123@test-domain.io.
Yang ditolak: mario@, @example.com, mario@example (tanpa TLD), spasi.
Pertukaran
Pola di atas tidak menerima:
- String yang dikutip
"strange (things)"@example.com(RFC mengizinkannya). - Domain dengan karakter Unicode (
\u00fcber@m\u00fcnchen.de). - TLD yang sangat panjang dan tidak lolos
\w(misalnya yang diinternasionalkan).
Jika Anda membutuhkannya, perluas kelas menjadi \p{L} dengan tanda u, atau delegasikan ke
perpustakaan khusus.
Kompromi dan praktik terbaik untuk validasi email
Tidak ada regex yang dapat menjamin bahwa alamat email benar-benar ada. Pola yang terlalu rumit menurunkan kinerja dan mengecualikan domain yang tidak biasa namun valid. Lebih baik menggunakan pola validasi sederhana untuk menolak kesalahan ketik yang jelas dan mengirimkan kode verifikasi.
Cobalah
Kenali setiap email dalam teks. Gunakan pola sederhana: huruf/digit/titik sebelum @, domain dengan setidaknya satu titik.
Tunjukkan petunjuk
Perluas bagian lokal menjadi [\\w.+-]+ dan domain menjadi [\\w-]+\\.[\\w.-]+ untuk menerima beberapa TLD.
Solusi tersedia setelah 3 upaya
Tinjau latihan
Tangkap domain (bagian setelah @) dari setiap email sebagai grup bernama `dominio`.
Tunjukkan petunjuk
Gabungkan bagian domain dalam grup bernama: (?<dominio>[\\w.-]+).
Solusi tersedia setelah 3 upaya
Tantangan tambahan
Find the domain part of an email (everything after `@`), excluding the `@` sign using lookbehind.
Tunjukkan petunjuk
Gunakan tampilan positif di belakang (?<=@) di depan kelas karakter domain.
Solusi tersedia setelah 3 upaya