我使用这个。
@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"
正则表达式用于验证电子邮件
([\w\.\-]+)
- 这是一级域名(包括多个字母和数字、点号和连字符)
([\w\-]+)
- 这是二级域名
((\.(\w){2,3})+)
- 这是其他等级的域名(从3到无限)包括一个点和2或3个字符
这个正则表达式有什么问题吗?
编辑:它无法匹配"something@someth.ing"类型的电子邮件地址。
我使用这个。
@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"
正则表达式用于验证电子邮件
([\w\.\-]+)
- 这是一级域名(包括多个字母和数字、点号和连字符)
([\w\-]+)
- 这是二级域名
((\.(\w){2,3})+)
- 这是其他等级的域名(从3到无限)包括一个点和2或3个字符
这个正则表达式有什么问题吗?
编辑:它无法匹配"something@someth.ing"类型的电子邮件地址。
像.museum这样的顶级域名不是按照这种方式匹配的,还有一些其他较长的顶级域名。此外,您可以使用MailAddress类来验证电子邮件地址,正如Microsoft在此处的说明中所述:
您可以使用System.Net.Mail.MailAddress类而不是使用正则表达式来验证电子邮件地址。要确定电子邮件地址是否有效,请将电子邮件地址传递给MailAddress.MailAddress(String)类构造函数。
public bool IsValid(string emailaddress)
{
try
{
MailAddress m = new MailAddress(emailaddress);
return true;
}
catch (FormatException)
{
return false;
}
}
我认为@"^([\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");
请注意,如果出现以下情况,则此方法将失败:
@
符号后面有子域名。
您使用长度大于3的顶级域名,例如.info
。
new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,})+)$");
。如果您仅需要基本验证,则我认为这是一个不错的解决方案。如果您需要RFC验证,则不应使用它。 - fsinisi90我有一个用于检查电子邮件地址的表达式。
由于上述任何一种都不如我的短小精悍和准确,所以我想在这里发布它。
@"^[\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/zh-cn/library/01escwtf.aspx (请注意,此代码还支持在互联网域名中使用非ASCII字符。)
有两个实现版本,分别适用于 .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@c@example.com
Invalid: Abc.example.com
Valid: j..s@proseware.com
Valid: j.@server1.proseware.com
Invalid: js*@proseware.com
Invalid: js@proseware..com
Valid: ma...ma@jjf.co
Valid: ma.@jjf.com
Invalid: ma@@jjf.com
Invalid: ma@jjf.
Invalid: ma@jjf..com
Invalid: ma@jjf.c
Invalid: ma_@jjf
Invalid: ma_@jjf.
Valid: ma_@jjf.com
Invalid: -------
Valid: 12@hostname.com
Valid: d.j@server1.proseware.com
Valid: david.jones@proseware.com
Valid: j.s@server1.proseware.com
Invalid: j@proseware.com9
Valid: j_9@[129.126.118.1]
Valid: jones@ms1.proseware.com
Invalid: js#internal@proseware.com
Invalid: js@proseware.com9
Invalid: js@proseware.com9
Valid: m.a@hostname.co
Valid: m_a1a@hostname.com
Valid: ma.h.saraf.onemore@hostname.com.edu
Valid: ma@hostname.com
Invalid: ma@hostname.comcom
Invalid: MA@hostname.coMCom
Valid: ma12@hostname.com
Valid: ma-a.aa@hostname.com.edu
Valid: ma-a@hostname.com
Valid: ma-a@hostname.com.edu
Valid: ma-a@1hostname.com
Valid: ma.a@1hostname.com
Valid: ma@1hostname.com
[me]@whatever.museum
。 - Totosomename@gmail.com.in.in.in
不是一个有效的电子邮件地址? - Ivaylo Slavovpublic 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);
}
private static Regex _emailRegex = EmailValidation();
- notracs这不符合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[] {
"ma@hostname.com",
"ma@hostname.comcom",
"MA@hostname.coMCom",
"m.a@hostname.co",
"m_a1a@hostname.com",
"ma-a@hostname.com",
"ma-a@hostname.com.edu",
"ma-a.aa@hostname.com.edu",
"ma.h.saraf.onemore@hostname.com.edu",
"ma12@hostname.com",
"12@hostname.com",
};
var invalidEmails = new[] {
"Abc.example.com", // No `@`
"A@b@c@example.com", // multiple `@`
"ma...ma@jjf.co", // continuous multiple dots in name
"ma@jjf.c", // only 1 char in extension
"ma@jjf..com", // continuous multiple dots in domain
"ma@@jjf.com", // continuous multiple `@`
"@majjf.com", // nothing before `@`
"ma.@jjf.com", // nothing after `.`
"ma_@jjf.com", // 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));
}
!#$%&'*+-/=?^_
.{|}~@example.com或者这个
Dörte@Sörensen.example.com`。 - T.S.public static bool IsValidEmail(string email)
{
if (!MailAddress.TryCreate(email, out var mailAddress))
return false;
// And if you want to be more strict:
var hostParts = mailAddress.Host.Split('.');
if (hostParts.Length == 1)
return false; // No dot.
if (hostParts.Any(p => p == string.Empty))
return false; // Double dot.
if (hostParts[^1].Length < 2)
return false; // TLD only one letter.
if (mailAddress.User.Contains(' '))
return false;
if (mailAddress.User.Split('.').Any(p => p == string.Empty))
return false; // Double dot or dot at end of user part.
return true;
}
最佳的电子邮件验证正则表达式
[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);
为什么不使用基于EF6属性的电子邮件验证?
如上所述,电子邮件的正则表达式验证总是存在漏洞。如果您正在使用EF6数据注释,可以通过可用的EmailAddress数据注释属性轻松实现可靠且更强大的电子邮件验证。当我在电子邮件输入字段上遇到移动设备特定的正则表达式失败时,我不得不删除以前用于电子邮件的正则表达式验证。当使用电子邮件验证的数据注释属性时,移动设备上的问题得到了解决。
public class LoginViewModel
{
[EmailAddress(ErrorMessage = "The email format is not valid")]
public string Email{ get; set; }
new System.ComponentModel.DataAnnotations.EmailAddressAttribute().IsValid(input)
foo+bar@example.com
是什么意思? - Valerij@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,})+)$""
。 - Ton Snoei