【问题标题】:Proper Email Regular Expresssion Validation in c# [duplicate]c#中正确的电子邮件正则表达式验证[重复]
【发布时间】:2014-05-09 10:13:54
【问题描述】:

在认为它与任何类似问题重复之前,请先阅读要求。

据我发现超过 20 个电子邮件验证正则表达式但都允许

a@a.co.in.in.in.in.in.in.in

作为有效的电子邮件地址!!!

我想限制只允许两个点(.)。

例如:

有效电子邮件

somename@yahoo.in

somename@yahoo.co.in

somename@somesite.bizz

somename@gmail.com

somename@somesite.net

无效的电子邮件

@.co

@a.com

a@a

a@.com

a@a.co.in.in //最多允许两个点,否则无效

a@a.co.in.in.in.in.in.in //最多允许两个点,否则无效

为此我尝试过

[a-zA-Z0-9._%+-]+@[a-zA-Z0-9]+\.[a-zA-Z]{2,5}[\.[a-zA -Z]{2,5}]{0,1}

它使用 2 个点但抛出无效消息

somename@somesite.com

【问题讨论】:

  • 此链接不包含allowing two dots"的解决方案
  • @ParthTrivedi,采用其中一种解决方案,然后手动验证两个点,如下面的回答中所述。
  • 请阅读链接为重复的问题。问题不是答案,而是你没有得到它。鉴于in.in 是一个有效域名,所有者可以完美地将邮件服务器放在子(子(子))域a.co.in.in.in.in.in.in.in 上。你不认为这是有效的并不意味着它不是。如果您想计算字符串中的点数,请在此站点中搜索“count characters in string”,但这与电子邮件验证无关。
  • 也许你是对的,但我的要求是Allow subdomain upto Only two dots。我很抱歉。
  • 如果你想拒绝来自foo@mail.company.com的人,那是你的损失。此外,您可能希望在第一个字符组中转义点。

标签: c# regex validation email c#-4.0


【解决方案1】:

我觉得应该是这样的

[a-zA-Z0-9._%+-]+@[a-zA-Z0-9]+\.[a-zA-Z]{2,5}(\.[a-zA-Z]{2,5}){0,1}

我在正则表达式方面没有经验,但我认为 [.[a-zA-Z]{2,5}] 被认为是字符组。括号可以解决问题。

【讨论】:

【解决方案2】:

一种可能的方法是首先使用允许电子邮件地址a@a.co.in.in.in.in.in.in.in 的现有正则表达式之一进行验证。如果验证通过,请执行以下步骤。

  1. @ 符号上进行字符串拆分。
  2. 取拆分的右手边,在.的句点上做拆分
  3. 如果结果数组的长度为23,则您已找到满足您对有效电子邮件定义的域。如果不是,则拒绝。

这样,您让您已经找到的regex 处理繁重的工作,而您只需检查您关心的一个附加条件。

【讨论】:

  • 但是是否可以在单个 reg ex 中做到这一点?
  • @ParthTrivedi,这绝对有可能,但正如您在链接问题中看到的那样,电子邮件验证regex 已经很麻烦了,所以使用一个已知可以工作的现有的,然后对其进行扩充与尝试针对特殊情况进行非常仔细的修改相比,这种方式往往会产生更干净、更可靠的代码。
猜你喜欢
  • 2015-12-20
  • 2014-12-09
  • 2010-10-30
  • 1970-01-01
  • 2011-06-24
  • 2015-07-04
  • 2012-10-03
  • 2016-11-15
  • 1970-01-01
相关资源
最近更新 更多