Porównałem te dwie metody na emailach z: https://en.wikipedia.org/wiki/Email_address#Examples
using System;
using System.Net.Mail;
using System.Linq;
using System.Text.RegularExpressions;
public class Program
{
const string EMAIL_REGEX = @"^[\w\.]+(@)[\w\-\.]{1,256}(\.)([\w\.]{1,256}?)([A-z0-9]{1,3})";
public static bool B(string emailAddress)
{
return Regex.IsMatch(emailAddress, EMAIL_REGEX);
}
public static bool A(string emailaddress)
{
try
{
MailAddress m = new MailAddress(emailaddress);
return true;
}
catch (FormatException)
{
return false;
}
}
public static void Main()
{
var validEmails = new[]
{
"simple@example.com",
"very.common@example.com",
"disposable.style.email.with+symbol@example.com",
"other.email-with-hyphen@example.com",
"fully-qualified-domain@example.com",
"user.name+tag+sorting@example.com",
"x@example.com",
"example-indeed@strange-example.com",
"admin@mailserver1",
"example@s.example",
"\" \"@example.org",
"\"john..doe\"@example.org"
};
var invalidEmails = new string[]
{
"Abc.example.com",
"A@b@c@example.com",
"a\"b(c)d,e:f;g<h>i[j\\k]l@example.com",
"just\"not\"right@example.com",
"this is\"not\\allowed@example.com",
"this\\ still\\\"not\\\\allowed@example.com",
"1234567890123456789012345678901234567890123456789012345678901234+x@example.com"
};
Console.WriteLine(validEmails.All(x => A(x))); // true
Console.WriteLine(validEmails.All(x => B(x))); // false
Console.WriteLine(invalidEmails.All(x => !A(x))); // false
Console.WriteLine(invalidEmails.All(x => !B(x))); // true
}
}
Jeżeli chodzi o poprawne adresy, to metoda A
łapie je wszystkie dobrze, ale przy sprawdzaniu listy niepoprawnych jest jeden wyjątek
Adres 1234567890123456789012345678901234567890123456789012345678901234+x@example.com
jest według metody A
poprawny, chociaż początek nie powinien przekraczać 64 znaków.
Raczej używałbym A
edit. poprawiłem escapy.