【问题标题】:Regular expression for email [duplicate]电子邮件的正则表达式 [重复]
【发布时间】:2010-11-18 19:54:18
【问题描述】:

可能重复:
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 应该是无效的

提前致谢 -罗林

【问题讨论】:

标签: regex validation email email-validation


【解决方案1】:

到目前为止我见过的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

【讨论】:

  • 我正在使用 asp.net(VB.net) 正则表达式验证器。由于我被要求纳入一些特定要求,我需要手动滚动一个表达式。这就是我不能使用在线提供的众多正则表达式之一的原因。
  • @unknown Lee 说“库”而不是“正则表达式”。如果您阅读 Lee 发布的链接,您会看到他建议 against 使用任何正则表达式,因为这样做本质上是不正确的。
【解决方案2】:

如果您的正则表达式引擎有后向断言,那么您只需在“@”之前添加一个“(?

【讨论】:

  • 我在 asp.net 中使用正则表达式验证器。这会在那里工作吗?
  • 你试了有没有用?
【解决方案3】:

您可以将[^\.] 放在@ 之前,这样它就可以允许除点以外的任何字符

当然这可能不是你想要的,所以你可以放一个[],其中包含任何合法字符

以防万一有人的电子邮件名称(我指的是 @ 之前的部分)只有 1 个字符,您可能需要使用 | 发挥创意

【讨论】:

  • 简单但绝妙的想法!这就是我想出的……我认为这应该可行。 ^([A-Za-z0-9]|[A-Za-z0-9](([a-zA-Z0-9,=\.!\-#|\$%\^&*\+/ \?_\{\}~]+)*)[a-zA-Z0-9,=!\-#|\$%\^&\*\+/\?_\{\}~])@(?:[0-9a-zA-Z-]+\.)+[a-zA-Z]{2,9}$ PS:关于让这个更短?
【解决方案4】:

如果您在 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”,它将失败。

【讨论】:

  • ahhh - 在我写这篇文章的时间里,给出了大约五个好的答案:)
【解决方案5】:

一个奇怪的游戏。唯一获胜的举动 不玩了。

说真的,使用正则表达式验证电子邮件地址的唯一成功方法是不使用正则表达式验证电子邮件地址。接受电子邮件地址的语法不规则。诚然,现代正则表达式可以支持一些非常规语法,但即便如此,为如此复杂的语法维护正则表达式(如您所见)几乎是不可能的。

我能想到的对电子邮件地址的正则表达式的唯一合理使用是在客户端做一些最小的检查(它是否包含@符号?)。

应该做的是:

  1. 向该电子邮件地址发送一封电子邮件,其中包含一个供用户单击的链接。如果用户单击链接,则电子邮件地址有效。此外,它存在,并且用户可能是在您的表单中输入电子邮件地址的人。这不仅 100% 验证电子邮件地址,还为您提供更多保证。

  2. 如果您无法做到 1,请使用预打包的电子邮件验证器。更好,同时使用 1 和 2。

  3. 如果您无法做到 1 或 2,请编写一个真正的解析器来验证电子邮件地址。

【讨论】:

    猜你喜欢
    • 2010-11-03
    • 2019-05-05
    • 2014-12-09
    • 1970-01-01
    • 2018-11-08
    • 2015-12-20
    • 2010-10-30
    • 1970-01-01
    相关资源
    最近更新 更多