Prosta walidacja maila w C#

Żeby sprawdzić poprawność adresu email, wcale nie trzeba męczyć się ze skomplikowanymi wyrażeniami regularnymi. W C# walidacja maila jest prosta – z pomocą przychodzi klasa MailAddress. Oczywiście jest to rozwiązanie wysokopoziomowe i wolne (rzuca wyjątki). Zapewnia jednak czytelność kodu.

Przykład (zaczerpnięty ze StackOverflow):

bool IsValid(string emailaddress)
{
  try
  {
    MailAddress m = new MailAddress(emailaddress);
    Console.WriteLine("TRUE" + "\t" + emailaddress);
    return true;
  }
  catch
  {
    Console.WriteLine("FALSE" + "\t" + emailaddress);
    return false;
  }
}

Testy – walidacja maila:

IsValid("ok@ok.pl");
IsValid("dolores.ryba@poczta-n.pl");
IsValid("dolores.ryba@poczta.odlotowa.pl");
IsValid("dolores.ryba@a.b.c.d.pl");
IsValid("psikus@dot.dot.dot..pl");
IsValid("@");
IsValid("");
IsValid(null);
IsValid("bad@");
IsValid("@wolf");
IsValid("@poczta.pl");
IsValid("cokolwiek");

Wynik:

TRUE ok@ok.pl
TRUE dolores.ryba@poczta-n.pl
TRUE dolores.ryba@poczta.odlotowa.pl
TRUE dolores.ryba@a.b.c.d.pl
TRUE psikus@dot.dot.dot..pl //poprawny mail? Kwestia dyskusyjna
FALSE @
FALSE
FALSE
FALSE bad@
FALSE @wolf
FALSE @poczta.pl
FALSE cokolwiek

Przydatny wpis? Postaw mi kawę :)

0 0 votes
Article Rating
Subscribe
Powiadom o
guest
12 komentarzy
najstarszy
najnowszy oceniany
Inline Feedbacks
View all comments
trackback
6 lat temu

C# – walidacja maila | Mój skrawek Sieci

Dziękujemy za dodanie artykułu – Trackback z dotnetomaniak.pl

Leviath
Leviath
6 lat temu

A test.test.@.test.@.test.@test.test.testowo21231924013752-3458340-53-4957345 bedzie poprawny?

schrodingersKat
schrodingersKat
6 lat temu
Reply to  Leviath

Nie, ale test.@gmail.com już tak, podobnie jak test@gmail.1234 albo 1@2.3. Bardzo słaby ten wysokopoziomowy walidator, a skomplikowanie wyrażeń regularnych to kwestia naprawdę sporna.

Łukasz K.
6 lat temu

Konstrukcja try catch do określania czy email jest prawidłowy, to nie jest dobry pomysł. Zdecydowanie szukał bym innej drogi.

Paweł Łukasik
6 lat temu
Reply to  Łukasz K.

Też mi się to wydawało złym sposobem ale stwierdziłem, że sprawdzę to na danych. Spróbowałem sprawdzić poprawność tych adresów przez 3 sposoby. try-catch, prosty regex i bardziej skomplikowany.

Sam program jest tutaj: https://gist.github.com/pawlos/9643dd72926d902b6276052fd712a27f a wyniki tutaj: https://gist.github.com/pawlos/7bd7d52ac5d346dcf4d9609e14a5c38f

Wniosek z tego, że jak jest dobrze, że walidacja jest szybka – problem pojawia się gdy faktycznie mail nie jest prawidłowy.

trackback

[…] Prosta walidacja maila w C# […]

Leviath
Leviath
6 lat temu

A test.test.@.test.@.test.@test.test.testowo21231924013752-3458340-53-4957345 bedzie poprawny?

schrodingersKat
schrodingersKat
6 lat temu
Reply to  Leviath

Nie, ale test.@gmail.com już tak, podobnie jak test@gmail.1234 albo 1@2.3. Bardzo słaby ten wysokopoziomowy walidator, a skomplikowanie wyrażeń regularnych to kwestia naprawdę sporna.

Łukasz K.
6 lat temu

Konstrukcja try catch do określania czy email jest prawidłowy, to nie jest dobry pomysł. Zdecydowanie szukał bym innej drogi.

Paweł Łukasik
6 lat temu
Reply to  Łukasz K.

Też mi się to wydawało złym sposobem ale stwierdziłem, że sprawdzę to na danych. Spróbowałem sprawdzić poprawność tych adresów przez 3 sposoby. try-catch, prosty regex i bardziej skomplikowany.

Sam program jest tutaj: https://gist.github.com/pawlos/9643dd72926d902b6276052fd712a27f a wyniki tutaj: https://gist.github.com/pawlos/7bd7d52ac5d346dcf4d9609e14a5c38f

Wniosek z tego, że jak jest dobrze, że walidacja jest szybka – problem pojawia się gdy faktycznie mail nie jest prawidłowy.

ladybu9
5 lat temu

Wow, nieźle. Dzięki za dokładne zbadanie wydajności:)