Регулярное выражение проверка электронной почты
Я использую этот
@"^([w.-]+)@([w-]+)((.(w){2,3})+)$"
регулярное выражение для проверки электронной почты
([w.-]+) - это для домена первого уровня (много букв и цифр, также Точка и дефис)([w-]+) - это для домена второго уровня((.(w){2,3})+) - и это для других доменов уровня(от 3 до бесконечности), который включает в себя точку и 2 или 3 литерала
что случилось с этим регулярным выражением?
EDIT: это не соответствует "что-то@что-то.луг" электронная почта
30 ответов:
TLD как . museum не совпадают таким образом, и есть несколько других длинных TLD. кроме того, вы можете проверить адреса электронной почты с помощью класс MailAddress как объясняет Microsoft здесь на заметку:
вместо использования регулярного выражения для проверки адреса электронной почты, вы можете использовать класс System.Net.Mail.MailAddress. Определять если адрес электронной почты является допустимым, передайте его в Почтовый адрес.Конструктор класса MailAddress (String).
public bool IsValid(string emailaddress) { try { MailAddress m = new MailAddress(emailaddress); return true; } catch (FormatException) { return false; } }Это экономит вам много головных болей af, потому что вам не нужно писать (или пытаться понять чужое) регулярное выражение.
Я думаю
@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"должны работать.
Вам нужно написать это какstring email = txtemail.Text; Regex regex = new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"); Match match = regex.Match(email); if (match.Success) Response.Write(email + " is correct"); else Response.Write(email + " is incorrect");имейте в виду, что это не удастся, если:
есть поддомен после
@символ.вы используете TLD с длиной больше 3, например
.info
У меня есть выражение для проверки адресов электронной почты, которые я использую.
@"^[\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*" + "@" + @"((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))$";для получения дополнительной информации читайте об этом здесь:регулярные выражения в C# (включая новый всеобъемлющий шаблон электронной почты)
кроме того, это проверяет правильность RFC на основе синтаксиса электронной почты, а не на то, действительно ли существует электронная почта. Единственный способ проверить, что электронная почта действительно существует для отправки и электронной почты, и пользователь должен подтвердить, что они получили письмо, нажав на ссылку или введя маркер.
тогда есть одноразовые Домены, такие как Mailinator.com и так далее. Это не делает ничего, чтобы проверить, является ли электронная почта от одноразового домена или нет.
Я нашел хороший документ на MSDN для него.
Как проверить, что строки находятся в допустимом формате электронной почты http://msdn.microsoft.com/en-us/library/01escwtf.aspx (обратите внимание, что этот код также поддерживает использование символов, отличных от ASCII, для доменных имен Интернета.)
есть 2 реализации, для .Net 2.0 / 3.0 и для .Net 3.5 и выше.
версия 2.0 / 3.0-это:bool IsValidEmail(string strIn) { // Return true if strIn is in valid e-mail format. return Regex.IsMatch(strIn, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"); }мои тесты по этому методу дайте:
Invalid: @majjf.com Invalid: A@b@[email protected] Invalid: Abc.example.com Valid: [email protected] Valid: [email protected] Invalid: js*@proseware.com Invalid: [email protected] Valid: [email protected] Valid: [email protected] Invalid: ma@@jjf.com Invalid: ma@jjf. Invalid: [email protected] Invalid: [email protected] Invalid: ma_@jjf Invalid: ma_@jjf. Valid: [email protected] Invalid: ------- Valid: [email protected] Valid: [email protected] Valid: [email protected] Valid: [email protected] Invalid: [email protected] Valid: j_9@[129.126.118.1] Valid: [email protected] Invalid: js#[email protected] Invalid: [email protected] Invalid: [email protected] Valid: [email protected] Valid: [email protected] Valid: [email protected] Valid: [email protected] Invalid: [email protected] Invalid: [email protected] Valid: [email protected] Valid: [email protected] Valid: [email protected] Valid: [email protected] Valid: [email protected] Valid: [email protected] Valid: [email protected]
это не соответствует всем требованиям RFC 5321 и 5322, но он работает со следующими определениями.
@"^([0-9a-zA-Z]([\+\-_\.][0-9a-zA-Z]+)*)+"@(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]*\.)+[a-zA-Z0-9]{2,17})$";Ниже приведен код
const String pattern = @"^([0-9a-zA-Z]" + //Start with a digit or alphabetical @"([\+\-_\.][0-9a-zA-Z]+)*" + // No continuous or ending +-_. chars in email @")+" + @"@(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]*\.)+[a-zA-Z0-9]{2,17})$"; var validEmails = new[] { "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", }; var invalidEmails = new[] { "Abc.example.com", // No `@` "A@b@[email protected]", // multiple `@` "[email protected]", // continuous multiple dots in name "[email protected]", // only 1 char in extension "[email protected]", // continuous multiple dots in domain "ma@@jjf.com", // continuous multiple `@` "@majjf.com", // nothing before `@` "[email protected]", // nothing after `.` "[email protected]", // nothing after `_` "ma_@jjf", // no domain extension "ma_@jjf.", // nothing after `_` and . "ma@jjf.", // nothing after `.` }; foreach (var str in validEmails) { Console.WriteLine("{0} - {1} ", str, Regex.IsMatch(str, pattern)); } foreach (var str in invalidEmails) { Console.WriteLine("{0} - {1} ", str, Regex.IsMatch(str, pattern)); }
лучшее регулярное выражение проверки электронной почты
[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?и его использование :-
bool isEmail = Regex.IsMatch(emailString, @"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z", RegexOptions.IgnoreCase);
Попробуй вот это:
public static bool IsValidEmailAddress(this string s) { var regex = new Regex(@"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?"); return regex.IsMatch(s); }
это предотвращает недопустимые электронные письма, упомянутые другими в комментариях:
[email protected] [email protected] name@hotmail [email protected] [email protected]Он также предотвращает электронные письма с двойными точками:
[email protected]попробуйте проверить его с таким количеством недействительных адресов электронной почты, как вы можете найти.
using System.Text.RegularExpressions; public static bool IsValidEmail(string email) { return Regex.IsMatch(email, @"\A[a-z0-9]+([-._][a-z0-9]+)*@([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,4}\z") && Regex.IsMatch(email, @"^(?=.{1,64}@.{4,64}$)(?=.{6,100}$).*"); }посмотреть проверить адреса электронной почты с помощью регулярного выражения в C#.
попробуйте это, это работает для меня:
public bool IsValidEmailAddress(string s) { if (string.IsNullOrEmpty(s)) return false; else { var regex = new Regex(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"); return regex.IsMatch(s) && !s.EndsWith("."); } }
почему бы не использовать проверку электронной почты на основе атрибутов EF6?
Как вы можете видеть выше, проверка регулярных выражений для электронной почты всегда имеет некоторое отверстие в нем. Если вы используете аннотации данных EF6, вы можете легко добиться надежной и сильной проверки электронной почты с помощью адрес электронной почты атрибут аннотации данных для этого. Мне пришлось удалить проверку регулярных выражений, которую я использовал раньше для электронной почты, когда я получил сбой регулярного выражения для мобильного устройства в поле ввода электронной почты. Когда атрибут аннотации данных, используемый для проверки электронной почты, проблема на мобильном устройстве была решена.
public class LoginViewModel { [EmailAddress(ErrorMessage = "The email format is not valid")] public string Email{ get; set; }
следующий код основан на реализация аннотаций данных Microsoft на github и я думаю, что это наиболее полная проверка для электронной почты:
public static Regex EmailValidation() { const string pattern = @"^((([a-z]|\d|[!#$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$"; const RegexOptions options = RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture; // Set explicit regex match timeout, sufficient enough for email parsing // Unless the global REGEX_DEFAULT_MATCH_TIMEOUT is already set TimeSpan matchTimeout = TimeSpan.FromSeconds(2); try { if (AppDomain.CurrentDomain.GetData("REGEX_DEFAULT_MATCH_TIMEOUT") == null) { return new Regex(pattern, options, matchTimeout); } } catch { // Fallback on error } // Legacy fallback (without explicit match timeout) return new Regex(pattern, options); }
было предпринято много попыток создать валидатор электронной почты, который улавливает почти все мировые требования к электронной почте.
метод расширения можно вызвать с помощью:
myEmailString.IsValidEmailAddress();строка шаблона регулярных выражений, которую вы можете получить, позвонив:
var myPattern = Regex.EmailPattern;код (в основном комментарии):
/// <summary> /// Validates the string is an Email Address... /// </summary> /// <param name="emailAddress"></param> /// <returns>bool</returns> public static bool IsValidEmailAddress(this string emailAddress) { var valid = true; var isnotblank = false; var email = emailAddress.Trim(); if (email.Length > 0) { // Email Address Cannot start with period. // Name portion must be at least one character // In the Name, valid characters are: a-z 0-9 ! # _ % & ' " = ` { } ~ - + * ? ^ | / $ // Cannot have period immediately before @ sign. // Cannot have two @ symbols // In the domain, valid characters are: a-z 0-9 - . // Domain cannot start with a period or dash // Domain name must be 2 characters.. not more than 256 characters // Domain cannot end with a period or dash. // Domain must contain a period isnotblank = true; valid = Regex.IsMatch(email, Regex.EmailPattern, RegexOptions.IgnoreCase) && !email.StartsWith("-") && !email.StartsWith(".") && !email.EndsWith(".") && !email.Contains("..") && !email.Contains(".@") && !email.Contains("@."); } return (valid && isnotblank); } /// <summary> /// Validates the string is an Email Address or a delimited string of email addresses... /// </summary> /// <param name="emailAddress"></param> /// <returns>bool</returns> public static bool IsValidEmailAddressDelimitedList(this string emailAddress, char delimiter = ';') { var valid = true; var isnotblank = false; string[] emails = emailAddress.Split(delimiter); foreach (string e in emails) { var email = e.Trim(); if (email.Length > 0 && valid) // if valid == false, no reason to continue checking { isnotblank = true; if (!email.IsValidEmailAddress()) { valid = false; } } } return (valid && isnotblank); } public class Regex { /// <summary> /// Set of Unicode Characters currently supported in the application for email, etc. /// </summary> public static readonly string UnicodeCharacters = "À-ÿ\p{L}\p{M}ÀàÂâÆæÇçÈèÉéÊêËëÎîÏïÔôŒœÙùÛûÜü«»€₣äÄöÖüÜß"; // German and French /// <summary> /// Set of Symbol Characters currently supported in the application for email, etc. /// Needed if a client side validator is being used. /// Not needed if validation is done server side. /// The difference is due to subtle differences in Regex engines. /// </summary> public static readonly string SymbolCharacters = @"!#%&'""=`{}~\.\-\+\*\?\^\|\/$"; /// <summary> /// Regular Expression string pattern used to match an email address. /// The following characters will be supported anywhere in the email address: /// ÀàÂâÆæÇçÈèÉéÊêËëÎîÏïÔôŒœÙùÛûÜü«»€₣äÄöÖüÜß[a - z][A - Z][0 - 9] _ /// The following symbols will be supported in the first part of the email address(before the @ symbol): /// !#%&'"=`{}~.-+*?^|\/$ /// Emails cannot start or end with periods,dashes or @. /// Emails cannot have two @ symbols. /// Emails must have an @ symbol followed later by a period. /// Emails cannot have a period before or after the @ symbol. /// </summary> public static readonly string EmailPattern = String.Format( @"^([\w{0}{2}])+@{1}[\w{0}]+([-.][\w{0}]+)*\.[\w{0}]+([-.][\w{0}]+)*$", // @"^[{0}\w]+([-+.'][{0}\w]+)*@[{0}\w]+([-.][{0}\w]+)*\.[{0}\w]+([-.][{0}\w]+)*$", UnicodeCharacters, "{1}", SymbolCharacters ); }
public static bool ValidateEmail(string str) { return Regex.IsMatch(str, @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"); }Я использую приведенный выше код для проверки адреса электронной почты.
public bool VailidateEntriesForAccount() { if (!(txtMailId.Text.Trim() == string.Empty)) { if (!IsEmail(txtMailId.Text)) { Logger.Debug("Entered invalid Email ID's"); MessageBox.Show("Please enter valid Email Id's" ); txtMailId.Focus(); return false; } } } private bool IsEmail(string strEmail) { Regex validateEmail = new Regex("^[\W]*([\w+\-.%]+@[\w\-.]+\.[A-Za-z] {2,4}[\W]*,{1}[\W]*)*([\w+\-.%]+@[\w\-.]+\.[A-Za-z]{2,4})[\W]*$"); return validateEmail.IsMatch(strEmail); }
чтобы проверить свой идентификатор электронной почты, вы можете просто создать такой метод и использовать его.
public static bool IsValidEmail(string email) { var r = new Regex(@"^([0-9a-zA-Z]([-\.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$"); return !String.IsNullOrEmpty(email) && r.IsMatch(email); }это вернет True / False. (Действительный / Недействительный Идентификатор Электронной Почты)
Это мой любимый подход к этому до сих пор:
public static class CommonExtensions { public static bool IsValidEmail(this string thisEmail) => !string.IsNullOrWhiteSpace(thisEmail) && new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$").IsMatch(thisEmail); }затем используйте созданное расширение строки, например:
if (!emailAsString.IsValidEmail()) throw new Exception("Invalid Email");
попробуйте следующий код:
using System.Text.RegularExpressions; if (!Regex.IsMatch(txtEmail.Text, @"^[a-z,A-Z]{1,10}((-|.)\w+)*@\w+.\w{3}$")) MessageBox.Show("Not valid email.");
ПОИСК СТРОК С ПОМОЩЬЮ МЕТОДА REGEX В C#
Как проверить электронную почту регулярным выражением?
string EmailPattern = @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"; if (Regex.IsMatch(Email, EmailPattern, RegexOptions.IgnoreCase)) { Console.WriteLine("Email: {0} is valid.", Email); } else { Console.WriteLine("Email: {0} is not valid.", Email); }Используйте Ссылку строку.Regex () Метод
1
^[\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*@((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))$2
^(([^<>()[\]\.,;:\s@\""]+(\.[^<>()[\]\.,;:\s@\""]+)*)|(\"".+\""))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$
Я думаю, что ваше каре и знак доллара являются частью проблемы Вы также должны немного изменить регулярное выражение, я использую следующее @ "[ :] +([\w. -]+)@([\w-.]) +((.(\w){2,3})+)"
Регулярное Выражение Шаблон Электронной Почты:
^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9\-](?!\.)){0,61}[a-zA-Z0-9]?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9\-](?!$)){0,61}[a-zA-Z0-9]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$
Я использую регулярное выражение.Выполняется().
прежде всего вам нужно добавить следующее утверждение:
using System.Text.RegularExpressions;тогда метод выглядит так:
private bool EmailValidation(string pEmail) { return Regex.IsMatch(pEmail, @"^(?("")("".+?(?<!\)""@)|(([0-9a-z]((\.(?!\.))|[-!#$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" + @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$", RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250)); }это частный метод из-за моей логики, но вы можете поместить метод как статический в другой слой, такой как "утилиты", и вызвать его оттуда, где вам нужно.
нет идеального регулярного выражения, но это довольно сильное, Я думаю, основанное на изучении RFC5322. И с интерполяцией строк C#, довольно легко следовать, я думаю, также.
const string atext = @"a-zA-Z\d!#$%&'\*\+-/=\?\^_`\{\|\}~"; var localPart = $"[{atext}]+(\.[{atext}]+)*"; var domain = $"[{atext}]+(\.[{atext}]+)*"; Assert.That(() => EmailRegex = new Regex($"^{localPart}@{domain}$", Compiled), Throws.Nothing);проверены с
NUnit 2.x.
просто дайте мне знать Если он не работает :)
public static bool isValidEmail(this string email) { string[] mail = email.Split(new string[] { "@" }, StringSplitOptions.None); if (mail.Length != 2) return false; //check part before ...@ if (mail[0].Length < 1) return false; System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"^[a-zA-Z0-9_\-\.]+$"); if (!regex.IsMatch(mail[0])) return false; //check part after @... string[] domain = mail[1].Split(new string[] { "." }, StringSplitOptions.None); if (domain.Length < 2) return false; regex = new System.Text.RegularExpressions.Regex(@"^[a-zA-Z0-9_\-]+$"); foreach (string d in domain) { if (!regex.IsMatch(d)) return false; } //get TLD if (domain[domain.Length - 1].Length < 2) return false; return true; }
Visual studio имел это в течение многих лет.
\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*надеюсь, что это помогает!
этот код поможет для проверки удостоверения личности электронной почты с помощью регулярных выражений в C#.Нет..это простой в использовании
if (!System.Text.RegularExpressions.Regex.IsMatch("<Email String Here>", @"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$")) { MessageBox.show("Incorrect Email Id."); }
public bool checkEmailAddress(string emailAddress) { // FullKade.COm string patternStrict = @"^(([^<>()[\]\.,;:\s@\""]+" + @"(\.[^<>()[\]\.,;:\s@\""]+)*)|(\"".+\""))@" + @"((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" + @"\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+" + @"[a-zA-Z]{2,}))$"; Regex reStrict = new Regex(patternStrict); bool isStrictMatch = reStrict.IsMatch(emailAddress); return isStrictMatch; // FullKade.COm }
комбинация вышеуказанных ответов. Я бы использовал предпочтительный подход Microsoft к использованию MailAddress, но реализовал его как расширение строки:
public static bool IsValidEmailAddress(this string emailaddress) { try { MailAddress m = new MailAddress(emailaddress); return true; } catch (FormatException) { return false; } }затем просто проверьте любую строку в качестве адреса электронной почты с помощью:
string customerEmailAddress = "[email protected]"; customerEmailAddress.IsValidEmailAddress()чистый, простой и портативный. Надеюсь, это кому-то поможет. Регулярное выражение для писем-это беспорядок.
что сказал Мэттсвансон есть блог на эту тему, и он настоятельно рекомендует не использовать регулярные выражения и вместо этого просто проверить ' @ ' abd может быть точка. Читайте его объяснение здесь: https://mdswanson.com/blog/2013/10/14/how-not-to-validate-email-addresses.html
Comments