using System; using System.Globalization; using System.Text.RegularExpressions; public class RegexUtilities { bool invalid = false; public bool IsValidEmail(string strIn) { invalid = false; if (String.IsNullOrEmpty(strIn)) return false; // Use IdnMapping class to convert Unicode domain names. try { strIn = Regex.Replace(strIn, @"(@)(.+)$", this.DomainMapper, RegexOptions.None, TimeSpan.FromMilliseconds(200)); } catch (RegexMatchTimeoutException) { return false; } if (invalid) return false; // Return true if strIn is in valid e-mail format. try { return Regex.IsMatch(strIn, @"^(?("")(""[^""]+?""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" + @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9]{2,17}))$", RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250)); } catch (RegexMatchTimeoutException) { return false; } } private string DomainMapper(Match match) { // IdnMapping class with default property values. IdnMapping idn = new IdnMapping(); string domainName = match.Groups[2].Value; try { domainName = idn.GetAscii(domainName); } catch (ArgumentException) { invalid = true; } return match.Groups[1].Value + domainName; } }
public class Application { public static void Main() { RegexUtilities util = new RegexUtilities(); string[] emailAddresses = { "david.jones@proseware.com", "d.j@server1.proseware.com", "jones@ms1.proseware.com", "j.@server1.proseware.com", "j@proseware.com9", "js#internal@proseware.com", "j_9@[129.126.118.1]", "j..s@proseware.com", "js*@proseware.com", "js@proseware..com", "js@proseware.com9", "js@proseware.com9", "j.s@server1.proseware.com" }; foreach (var emailAddress in emailAddresses) { if (util.IsValidEmail(emailAddress)) Console.WriteLine("Valid: {0}", emailAddress); else Console.WriteLine("Invalid: {0}", emailAddress); } } }