使用-字符的电子邮件正则表达式
本文关键字:电子邮件 正则表达式 字符 使用 | 更新日期: 2024-09-26 02:22:47
我使用此正则表达式检查电子邮件。/^'w+([-+.'']'w+)*@'w*([-.çöişğü]'w*)*'.'w+([-.]'w+)*$/
但是这个正则表达式不接受像e-e--@hotmail.com
那样的电子邮件。你能帮我如何更改我的正则表达式以接受这样的电子邮件吗?
如果您使用c#
标记标记您的问题,为什么不使用内置的System.Net.Mail.MailAddress
类构造函数进行电子邮件验证?它支持许多邮件地址格式,并且涵盖了比正则表达式更多的场景。参见:
var isEmailValid = false;
try
{
var email = new MailAddress("e-e--@hotmail.com");
isValidEmail = true;
{
catch (FormatException x)
{
// invalid email address
}
这不是比正则表达式更容易吗?
将第二个'w+
更改为'w*
:
^''w+([-+.'']''w*)*@''w*([-.çöişğü]''w*)*''.''w+([-.]''w+)*$
我在HTML5模式中使用它电子邮件模式:
^(?:[-+~=!#$%&'*/?'^`{|}'w]+)(?:'.[-+~=!#$%&'*/?'^`{|}'w]+)*@(?:[a-zA-Z0-9][-a-zA-Z0-9]*[a-zA-Z0-9]'.)+[a-zA-Z]{2,6}$
/^'w+([-+.'']*'w*)*@'w*([-.çöişğü]'w*)*'.'w+([-.]'w+)*$/
这是我专门用于电子邮件验证的正则表达式,但我不会以这种方式重新定义,尤其是在企业上下文中使用时;因为在考虑电子邮件验证时,正则表达式过于严格。它们不为可能复杂的域留出空间,并且要包含所有这些可能性,需要一个正则表达式,使其变得不稳定。
string strRegex = @"^(?("")("".+?(?<!'')""@)|(([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]))$";
Regex re = new Regex(strRegex);
if (re.IsMatch(txtEmail.Text) || txtEmail.Text == "" || txtEmail.Text.Length > 100 && txtEmail.Text.Length < 10)
{
MessageBox.Show("Thanks");
}
else
{
MessageBox.Show("Please enter a valid email address");
}
}
我建议这是一个更稳定、更高效的独奏,并利用EmailAddressAttribute,因为它是一个内置类,允许mroe空间,并且不像regex那样严格。希望这能有所帮助。
TextBox tb = new TextBox();
tb.KeyDown += new KeyEventHandler(txtEmail_KeyDown);
// Run Checks after the enter is pressed.
if (e.KeyCode == (Keys.Enter) || e.KeyCode == (Keys.Tab))
{
if (!new EmailAddressAttribute().IsValid(txtEmail.Text))
{
MessageBox.Show(txtEmail.ToString() + " is not a valid Email address");
txtEmail.Clear();
}
else
{
MessageBox.Show("The address: " + txtEmail + " is valid");
txtEmail.Clear();
}
}