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ę :)

12
Dodaj komentarz

avatar
6 Comment threads
6 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
5 Comment authors
ladybu9Paweł ŁukasikŁukasz K.Podsumowanie roku 2017 - Skrawek Siecid9k Recent comment authors
  Subscribe  
najnowszy najstarszy oceniany
Powiadom o
trackback

C# – walidacja maila | Mój skrawek Sieci

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

Leviath
Gość
Leviath

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

schrodingersKat
Gość
schrodingersKat

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.

Leviath
Gość
Leviath

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

schrodingersKat
Gość
schrodingersKat

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.
Gość

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

Paweł Łukasik
Gość

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
Gość

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

Łukasz K.
Gość

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

Paweł Łukasik
Gość

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# […]