可能重复:
What is the best regular expression for validating email addresses?
我正在使用这个特定的正则表达式来检查电子邮件。
"^[A-Za-z0-9](([a-zA-Z0-9,=\.!\-#|\$%\^&\*\+/\?_`\{\}~]+)*)@(?:[0-9a-zA-Z-]+\.)+[a-zA-Z]{2,9}$"
我遇到的问题是,这允许在“@”符号之前的句点。 是否有任何方法可以修改此表达式,以便不会发生这种情况,但仍保留所有其他条件。
a。@ b.com应无效
提前致谢 -Rollin
答案 0 :(得分:7)
到目前为止我见过的best answer。老实说,如果你给出了你正在使用的语言或工具集的一些指示,我会指出你为你做的那个库,而不是告诉你如何手动滚动正则表达式。
编辑:鉴于这是.NET上的其他信息,我会使用MailAddress
类,并完全放弃使用正则表达式的想法:
public bool IsAddressValid(string text)
{
try
{
MailAddress address = new MailAddress(text);
return true;
}
catch (FormatException)
{
return false;
}
}
如果除了验证地址本身之外还有其他要求(例如确保它来自一组特定的域或某些域),那么在验证地址有效之后,您可以通过更简单的测试来做到这一点。我suggested in another post。
答案 1 :(得分:3)
一场奇怪的比赛。唯一的获胜举动 不玩。
严重的是,使用正则表达式验证电子邮件地址的唯一获胜方法是不使用正则表达式验证电子邮件地址。接受电子邮件地址的语法不规律。确实,现代正则表达式可以支持一些非常规语法,但即便如此,维持这种复杂语法的正则表达式(如你所见)几乎是不可能的。
我能想到的唯一合理使用带有电子邮件地址的正则表达式是在客户端进行一些最小的检查(它是否包含@符号?)。
应该做的是:
向电子邮件地址发送电子邮件,其中包含供用户点击的链接。如果用户单击该链接,则该电子邮件地址有效。此外,它存在,用户可能是在您的表单中输入电子邮件地址的用户。这不仅可以100%验证电子邮件地址,还可以为您提供更多保障。
如果您不能1,请使用预先打包的电子邮件验证程序。更好,同时使用1和2。
如果你不能做1或2,写一个真正的解析器来验证电子邮件地址。
答案 2 :(得分:1)
你可以将[^\.]
放在@
之前,以便它允许除点之外的任何字符
当然这可能不是你想要的,所以你可以在[]
中添加任何合法字符
如果某人有一个只有1个字符的电子邮件名称(我的意思是@
之前的部分),您可能需要通过|
答案 3 :(得分:0)
如果您的正则表达式引擎具有lookbehind断言,那么您只需在“@”之前添加“(?<!\。)”。
答案 4 :(得分:0)
如果您在Perl中执行此操作 - 以下脚本是一个示例
my $string = 'name@domain.com';
if($string =~/(\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,9})/)
{
print "gotcha!";
}
else
{
print "nope :(";
}
正如您所看到的,Perl正则表达式字符\ w优雅地处理句点。如果将$ string更改为“name。@ domain.com”,则会失败。