Lompati ke konten utama
Modul 8 · Pelajaran 1 dari 429/32 dalam kursus~12 min
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.

Code
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

Latihan#regex.m8.l1.e1
Upaya: 0Memuat…

Kenali setiap email dalam teks. Gunakan pola sederhana: huruf/digit/titik sebelum @, domain dengan setidaknya satu titik.

Memuat editor…
Tunjukkan petunjuk

Perluas bagian lokal menjadi [\\w.+-]+ dan domain menjadi [\\w-]+\\.[\\w.-]+ untuk menerima beberapa TLD.

Solusi tersedia setelah 3 upaya

Tinjau latihan

Latihan#regex.m8.l1.e2
Upaya: 0Memuat…

Tangkap domain (bagian setelah @) dari setiap email sebagai grup bernama `dominio`.

Memuat editor…
Tunjukkan petunjuk

Gabungkan bagian domain dalam grup bernama: (?<dominio>[\\w.-]+).

Solusi tersedia setelah 3 upaya

Tantangan tambahan

Latihan#regex.m8.l1.e3
Upaya: 0Memuat…

Find the domain part of an email (everything after `@`), excluding the `@` sign using lookbehind.

Memuat editor…
Tunjukkan petunjuk

Gunakan tampilan positif di belakang (?<=@) di depan kelas karakter domain.

Solusi tersedia setelah 3 upaya