【问题标题】:Regex email address validation fails if Underscore character present如果存在下划线字符,则正则表达式电子邮件地址验证失败
【发布时间】:2011-04-06 04:52:40
【问题描述】:

我对正则表达式非常陌生,但我认为这是验证表单中输入的电子邮件地址的最佳方式。

我的正则表达式有效,除非输入的电子邮件地址中包含下划线字符 (_)。

由于我缺乏使用正则表达式的经验,我不确定我应该在我的模式中的哪个位置添加违规字符以允许它:

Dim pattern As String = "^[-a-zAZ0-9][-.a-zA-Z0-9]*@[-.a-zA-Z0-0]+(\.[-.a-zA-Z0-0+)*\." & _
    "(com|edu|info|gov|int|mil|net|org|biz|name|museum|coop|aero|pro|tv|[a-zA-Z]{2})$"

DreamInCode 上的另一个人也遇到了同样的问题。他说他通过在数字检查后添加_ 来修复它。

我看到 A-Z0-9,但我不确定哪个是数字检查...我在 Regex 中工作不多,所以我希望没有人介意指出在哪里添加 _

提前致谢

【问题讨论】:

  • 您的正则表达式也会在许多其他方面被破坏。电子邮件地址不适合正则表达式。有关详细信息,请参阅此问题:stackoverflow.com/questions/201323/…
  • 虽然如果你真的想做,这个应该是正确的(如果使用正确的话):ex-parrot.com/~pdw/Mail-RFC822-Address.html
  • 基本上我只是为了确保用户以正确的格式输入电子邮件地址,即<username>@this.com
  • 尽管他可能以您的正则表达式不支持的正确格式输入它。因此,您可能会阻止人们使用合法的电子邮件地址。你仍然无法阻止他打错字。我建议只做一个非常基本的检查,它是否包含一个 @ 和至少一个 .,这至少应该阻止任何人错误地输入邮政地址而不是电子邮件地址或类似地址
  • 你的正则表达式是一团糟。它会验证正常的电子邮件,例如:“a..-weird--mail-..@.-.-some.-.-weird.--domain.com” 还有一个类型不匹配,您忘记了 A nad 之间的破折号第一部分中的 Z:^[-a-zA-Z0-9]...

标签: vb.net regex email-validation


【解决方案1】:

如果您真的想对您的正则表达式进行可能的修复:

Dim pattern As String = "^[a-zA-Z0-9][-\._a-zA-Z0-9]*@[a-zA-Z0-9][-\.a-zA-Z0-9]*\.(com|edu|info|gov|int|mil|net|org|biz|name|museum|coop|aero|pro|tv|[a-zA-Z]{2})$"

无论如何,正如我在评论中所解释的那样,对于许多错误的邮件,这仍然可以验证。

【讨论】:

  • 感谢马可的反馈。我一直在做更多的研究,并将我的正则表达式更改为以下Dim pattern As String = "^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$",它似乎可以通过_ 验证。
  • @Logan Young:如你所愿!但是仅供参考,您发现的最后一个不验证大写字母(因为您删除了 AZ),因此“LoganYoung@somedomain.com”将被您的新正则表达式拒绝为无效邮件(但它是一个有效的邮件地址并用于许多公司)。它不验证以超过 4 个字符结尾的域,您问题中的正则表达式能够接受 .museum 域,这个新的将拒绝任何以“.museum”结尾的邮件。最后,它会验证好的垃圾邮件,例如:“-.crazy-.email-.-address.-.@--invalid.-.-.-domain.com”
  • 那么使用"^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@... 怎么样?然后只是增加结尾长度说...... 7个字符?至于像你的例子那样验证糟糕的地址,大多数人不会使用这样的东西,但我在我的电子邮件地址中使用 .-_ 字符,所以我相信还有其他人也这样做。
  • @Logan Young:那很好。
【解决方案2】:

验证电子邮件的唯一方法是向该地址发送消息并等待回复。

一个简单的检查可以测试其中是否有@。但是如果你想使用你的正则表达式,你必须在 char 类中添加_:[-a-zA-Z0-9_]

【讨论】:

  • 我不想验证电子邮件地址是否存在,我只想验证电子邮件地址的格式是否正确。如果它不存在,那就是用户的问题。无论如何,我尝试了[-a-zA-Z0-9_],没有任何改善
【解决方案3】:

如果有人需要,这是防止在“@”之前使用下划线的方法,

^[a-zA-Z0-9][-\.a-zA-Z0-9]*@[a-zA-Z0-9][-\.a-zA-Z0-9]*\.(com|edu|info|gov|int|mil|net|org|biz|name|museum|coop|aero|pro|tv|[a-zA-Z]{2})$

但我已经看到一些带有下划线的邮件地址..正如 M42 所说,发送一封电子邮件并等待他们激活他们的帐户将是一个不错的选择..但不会立即完成..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 2023-04-05
    • 2011-02-14
    • 2017-01-12
    相关资源
    最近更新 更多