【问题标题】:Regular expression for 5 comma separated email id5 个逗号分隔的电子邮件 ID 的正则表达式
【发布时间】:2017-10-25 19:43:56
【问题描述】:

我试图在一个正则表达式中验证 5 个逗号分隔的电子邮件 ID。 我目前使用下面的正则表达式

^([\w+-.%]+@[\w-.]+\.[A-Za-z]{2,4},?)+$

这对一个电子邮件 ID 有效。

我想知道如何实现相同的目标,同样非常感谢任何小的投入。

提前致谢。

【问题讨论】:

  • 显示一些有效和无效的例子
  • 您确定您的正则表达式用于电子邮件吗?好像是电话号码。
  • sa@gmail.com,a@gmail.com 这样我只能添加 5 个有效的电子邮件 ID。 sa@gamil.com,sa@gamil.com like thai i add 6 or more email Id is invalid.
  • 您不应该同时验证所有的电子邮件地址,很难向用户显示问题所在。将您的数据拆分为 Array,然后验证每封电子邮件和 Array.prototype.length 值。 'abc@bca.ab,abc@bca.cab,aaabc@bca.ab,abc@bca.ab'.split(',').map(validator);

标签: javascript regex asp.net-mvc validation data-annotations


【解决方案1】:

首先,修复模式:- 在字符类中的两个字符之间形成一个范围。所以,你的正则表达式的电子邮件部分应该是[-\w+.%]+@[\w-.]+\.[A-Za-z]{2,4}(注意-在第一个字符类中的位置,在第二个字符类中,可以将它放在速记字符类\w和下一个字符之间) .

接下来,要匹配 1 到 5 封逗号分隔的电子邮件,您需要先匹配第一个,然后再匹配 0 到 4 封电子邮件。并在模式周围添加锚点以确保模式与整个字符串匹配:

^[-\w+.%]+@[\w-.]+\.[A-Za-z]{2,4}(?:,[-\w+.%]+@[\w-.]+\.[A-Za-z]{2,4}){0,4}$

基本上,^<EMAIL>(?:,<EMAIL>){0,4}$:

  • ^ - 字符串开头
  • <EMAIL> - 你的电子邮件模式
  • (?: - 一个非捕获组的开始,充当一系列模式的容器:
    • , - 逗号
    • <EMAIL> - 你的电子邮件模式
  • ){0,4} - 以上这些序列出现 0 到 4 次
  • $ - 字符串结束。

另一种思路是用,拆分,然后验证:

var s = "abc@gg.com,abc2@gg.com,abc3@gg.com,abc4@gg.com,abc5@gg.com";
var re = /^[-\w+.%]+@[\w-.]+\.[A-Za-z]{2,4}$/;
var items = s.split(",");
if (items.length <= 5 && items.filter(function(x) { return re.test(x); }).length === items.length ) {
   console.log("VALID => ", items);
} else {
   console.log("INVALID!");
}

【讨论】:

  • 它的工作,但我想最多 5 个电子邮件输入。1 个电子邮件 ID 输入也是有效的。但是 6 个电子邮件输入无效。
  • 所以,我最初的假设是有效的。我已经回复了我最初发布的答案。
  • 它工作正常,但我想输入最多 5 个电子邮件 ID。我输入 3 或 4 个电子邮件 ID 也是有效的。但输入的 6 个电子邮件 ID 无效。
  • I fixed the single regex part。我现在已经修复了 JS 解决方案。
  • 如果手机号码使用正则表达式,我可以这样做吗?
【解决方案2】:

下面的 JavaScript 正则表达式可以用于多个逗号分隔的电子邮件 ID,希望这对你有用

/^(\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]{2,4}\s*?,?\s*?)+$/

【讨论】:

  • 这个正则表达式也将匹配strings with trailing whitespaces and a comma。它也没有优化,因为[.-] 与点或- 线性匹配,而(\.|-) 将导致回溯。
  • 此外,它还匹配超过 5 个逗号分隔的电子邮件。
  • 是的,我知道我在下面解释了 javaScript 的正则表达式,您可以使用多个逗号分隔的电子邮件 ID,希望这对您有用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-22
  • 1970-01-01
  • 2019-03-19
  • 1970-01-01
  • 1970-01-01
  • 2015-12-21
  • 1970-01-01
相关资源
最近更新 更多