Przejdź do głównej treści
eLearner.app
Moduł 8 · Lekcja 1 z 429/32 w kursie~12 min
Lekcje modułu (1/4)

Walidacja adresu e-mail

„Prawidłowa” walidacja adresu e-mail to znacznie trudniejszy problem, niż się wydaje: standard RFC 5322 to prawdziwy potwór. W praktyce wybieramy wzorzec wystarczająco dobry, który akceptuje typowe przypadki i odrzuca te ewidentnie błędne.

Code
Pattern: ^[\w.+-]+@[\w-]+(?:\.[\w-]+)+$
  • [\w.+-]+ -- część lokalna: litery, cyfry, _, ., +, -.
  • @ -- separator.
  • [\w-]+(?:\.[\w-]+)+ -- domena + co najmniej jedna domena najwyższego poziomu (TLD) rozdzielone kropką ..

Co akceptuje: mario.rossi@example.com, foo+bar@sub.example.co.uk, user_123@test-domain.io.

Co odrzuca: mario@, @example.com, mario@example (brak TLD), spacje.

Kompromisy

Powyższy wzorzec nie akceptuje:

  • Ciągów w cudzysłowach "strange (things)"@example.com (RFC na to zezwala).
  • Domen ze znakami Unicode (\u00fcber@m\u00fcnchen.de).
  • Bardzo długich TLD, które nie pasują do klasy \w (np. domen międzynarodowych).

Jeśli ich potrzebujesz, rozszerz klasę znaków do \p{L} z flagą u lub skorzystaj ze specjalistycznej biblioteki.

Kompromisy i najlepsze praktyki w walidacji e-maili

Żadne wyrażenie regularne nie gwarantuje, że adres e-mail rzeczywiście istnieje. Zbyt skomplikowane wzorce obniżają wydajność i wykluczają nietypowe, ale poprawne domeny. Lepiej zastosować prosty wzorzec walidacji, aby odrzucić oczywiste błędy, i wysłać kod weryfikacyjny.

Spróbuj sam

Ćwiczenie#regex.m8.l1.e1
Próby: 0Ładowanie...

Rozpoznaj każdy adres e-mail w tekście. Użyj prostego wzorca: litery/cyfry/kropki przed znakiem @, domena z co najmniej jedną kropką.

Ładowanie edytora...
Pokaż wskazówkę

Rozszerz część lokalną do [\w.+-]+ oraz domenę do [\w-]+\.[\w.-]+, aby akceptować wiele domen najwyższego poziomu (TLD).

Rozwiązanie dostępne po 3 próbach

Ćwiczenie powtórzeniowe

Ćwiczenie#regex.m8.l1.e2
Próby: 0Ładowanie...

Przechwyć domenę (część po znaku @) każdego adresu e-mail jako grupę nazwaną `dominio`.

Ładowanie edytora...
Pokaż wskazówkę

Otocz część domenową grupą nazwaną: (?<dominio>[\w.-]+).

Rozwiązanie dostępne po 3 próbach

Dodatkowe wyzwanie

Ćwiczenie#regex.m8.l1.e3
Próby: 0Ładowanie...

Znajdź część domenową adresu e-mail (wszystko po `@`), wykluczając znak `@` za pomocą asercji lookbehind.

Ładowanie edytora...
Pokaż wskazówkę

Użyj pozytywnego lookbehind (?<=@) przed klasą znaków domeny.

Rozwiązanie dostępne po 3 próbach