Ana içeriğe geç
Modül 8 · Ders 1 ders 4Kurstaki 29/32~12 min
Modül dersleri (1/4)

Bir e-postayı doğrulama

Bir e-postayı "doğru" şekilde doğrulamak göründüğünden çok daha zor bir sorundur: RFC 5322 bir canavardır. Uygulamada yeterince iyi bir model seçiyoruz: Yaygın vakaları kabul eder ve açıkça yanlış olanları reddeder.

Code
Pattern: ^[\w.+-]+@[\w-]+(?:\.[\w-]+)+$
  • [\w.+-]+ -- yerel kısım: harfler, rakamlar, _, ., +, -.
  • @ -- ayırıcı.
  • [\w-]+(?:\.[\w-]+)+ -- alan adı + . ile ayrılmış en az bir TLD.

Kabul ettiği şeyler: mario.rossi@example.com, foo+bar@sub.example.co.uk, user_123@test-domain.io.

Neyi reddeder: mario@, @example.com, mario@example (TLD yok), boşluklar.

Takaslar

Yukarıdaki model şunları kabul etmez:

  • Alıntılanan dizeler "strange (things)"@example.com (RFC bunlara izin verir).
  • Unicode karakterli alan adları (\u00fcber@m\u00fcnchen.de).
  • \w değerini geçmeyen çok uzun TLD'ler (ör. uluslararası hale getirilmiş olanlar).

Bunlara ihtiyacınız varsa sınıfı u bayrağıyla \p{L} olarak genişletin veya uzmanlaşmış kütüphane.

E-posta doğrulama için ödünleşimler ve en iyi uygulamalar

Hiçbir normal ifade bir e-posta adresinin gerçekten var olduğunu garanti edemez. Aşırı karmaşık modeller performansı düşürür ve olağandışı ancak geçerli alanları hariç tutar. Açık yazım hatalarını reddetmek ve bir doğrulama kodu göndermek için basit bir doğrulama modeli kullanmak daha iyidir.

Deneyin

Egzersiz#regex.m8.l1.e1
Denemeler: 0Yükleniyor…

Metindeki her e-postayı tanıyın. Basit bir kalıp kullanın: @'den önce harfler/rakamlar/noktalar, en az bir nokta içeren alan adı.

Düzenleyici yükleniyor…
İpucu göster

Birden fazla TLD'yi kabul etmek için yerel kısmı [\\w.+-]+ olarak ve etki alanını da [\\w-]+\\.[\\w.-]+ olarak genişletin.

3 denemeden sonra çözüm mevcut

Alıştırmayı gözden geçirin

Egzersiz#regex.m8.l1.e2
Denemeler: 0Yükleniyor…

Her e-postanın etki alanını (@'dan sonraki kısım) adlandırılmış bir grup `dominio' olarak yakalayın.

Düzenleyici yükleniyor…
İpucu göster

Etki alanı bölümünü adlandırılmış bir gruba sarın: (?<dominio>[\\w.-]+).

3 denemeden sonra çözüm mevcut

Ek zorluk

Egzersiz#regex.m8.l1.e3
Denemeler: 0Yükleniyor…

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

Düzenleyici yükleniyor…
İpucu göster

Etki alanı karakter sınıfının önünde pozitif bir geriye bakış (?<=@) kullanın.

3 denemeden sonra çözüm mevcut