用于GMail风格电子邮件地址验证的Javascript正则表达式

用于GMail风格电子邮件地址验证的Javascript正则表达式,javascript,regex,validation,email,email-validation,Javascript,Regex,Validation,Email,Email Validation,我需要一个正则表达式,将接受格式良好的电子邮件在几种格式见下文,将在一个逗号分隔的列表中输入。我有基本的电子邮件地址 验证正则表达式 ^[\w\d._%+-]+@(?:[\w\d-]+\.)+(\w{2,})(,|$) 它可以处理测试用例A和B,但不能处理其他的。我也试过了 ^(\<)?[\w\d._%+-]+@(?:[\w\d-]+\.)+(\w{2,})(\>)?(,|$) 它能够处理A、B和C,但只验证了每个测试用例D和E中的第一个电子邮件地址。我甚至还没有测试过格式3的

我需要一个正则表达式,将接受格式良好的电子邮件在几种格式见下文,将在一个逗号分隔的列表中输入。我有基本的电子邮件地址 验证正则表达式

^[\w\d._%+-]+@(?:[\w\d-]+\.)+(\w{2,})(,|$) 
它可以处理测试用例A和B,但不能处理其他的。我也试过了

^(\<)?[\w\d._%+-]+@(?:[\w\d-]+\.)+(\w{2,})(\>)?(,|$)
它能够处理A、B和C,但只验证了每个测试用例D和E中的第一个电子邮件地址。我甚至还没有测试过格式3的正则表达式

tl;dr需要一个用于验证电子邮件地址1、2和3的正则表达式

测试正则表达式的好网站:

资料

测试用例 A.nora@example.com Bnora@example.com, fred@example.com Cfred@example.com D Efred@example.com,

电子邮件地址格式 1.xyz@example.com 2. 3.xyz

编辑 我将此标记为可能的副本:

反过来,它似乎是以下内容的复制品:


这两篇文章都对regex作为电子邮件验证的有效性进行了大量讨论。然而,所提供的顶级投票规则似乎并没有达到我想要的,所以我认为这还没有答案。

这会有什么帮助吗? 我测试了2个。和3.,并且它检测这两种模式

var isEmail_re       = /^\s*[\w\-\+_]+(\.[\w\-\+_]+)*\@[\w\-\+_]+\.[\w\-\+_]+(\.[\w\-\+_]+)*\s*$/;

function isEmail (s) {
   return String(s).search (isEmail_re) != -1;
}

alert(isEmail ('"xyz"<xyz@example.com>'));

像这样的东西有用吗

我测试了2个。和3.,并且它检测这两种模式

var isEmail_re       = /^\s*[\w\-\+_]+(\.[\w\-\+_]+)*\@[\w\-\+_]+\.[\w\-\+_]+(\.[\w\-\+_]+)*\s*$/;

function isEmail (s) {
   return String(s).search (isEmail_re) != -1;
}

alert(isEmail ('"xyz"<xyz@example.com>'));

首先将逗号分隔的列表拆分为一个数组,并分别验证数组的每个成员会更简单。这将使正则表达式更易于编写、阅读和维护,还可以让您向输入列表的用户提供特定反馈,因为第三个电子邮件地址无效

所以假设你是用劈叉的方式做的

var bits = csv.split(',');
遍历位数组

然后对于正则表达式,类似这样的内容将捕获2和3

(\"[a-z0-9\s]+\"\s+)?\<[\w\d._%+-]+@(?:[\w\d-]+\.)+(\w{2,})\>

而且,您可以使用更简单的方法捕获简单的电子邮件地址,而不使用“仅当电子邮件地址前面的字符串包含一个时才是确定的”。首先将逗号分隔的列表拆分为一个数组,并单独验证数组的每个成员会更简单。这将使正则表达式更易于编写、阅读和维护,还可以让您向输入列表的用户提供特定反馈,因为第三个电子邮件地址无效

所以假设你是用劈叉的方式做的

var bits = csv.split(',');
遍历位数组

然后对于正则表达式,类似这样的内容将捕获2和3

(\"[a-z0-9\s]+\"\s+)?\<[\w\d._%+-]+@(?:[\w\d-]+\.)+(\w{2,})\>

并且,您可以使用更简单的方法捕获简单的电子邮件地址,而不使用“仅当电子邮件地址前面的字符串包含一个时才是ok”。此validateEmail函数将检查电子邮件地址的基本语法xyz@example.com. 包含的ifs将检查备用格式“xyz”,并仅验证实际电子邮件部分。 只有<或>的项被视为无效,因为格式不好Nope@example.com>,与任何缺少invalidExample.com所需基本结构的电子邮件相同


此validateEmail函数将检查电子邮件地址的基本语法xyz@example.com. 包含的ifs将检查备用格式“xyz”,并仅验证实际电子邮件部分。 只有<或>的项被视为无效,因为格式不好Nope@example.com>,与任何缺少invalidExample.com所需基本结构的电子邮件相同


提供的链接或答案都不是这个问题的最佳答案。以下是解决问题的方法:

/*
* regex checks: must start with the beginning of a word or a left caret
* must end with either the end of a word or a right caret
* can handle example.example.com as possible domain
* email username can have + - _ and .
* not case sensitive
*/
var EMAIL_REGEX = /(\<|^)[\w\d._%+-]+@(?:[\w\d-]+\.)+(\w{2,})(\>|$)/i;  
var emails = emailList.trim().split(',');  
var validEmails = [];  
var invalidEmails = [];  

for (var i = 0; i < emails.length; i++) {  
    var current = emails[i].trim();
    if(current !== "") {
        //if something matching the regex can be found in the string
        if(current.search(EMAIL_REGEX) !== -1) {
            //check if it has either a front or back bracket
            if(current.indexOf("<") > -1 || current.indexOf(">") > -1) {
                //if it has both, find the email address in the string
                if(current.indexOf("<") > -1 && current.indexOf(">") > -1) {
                    current = current.substr(current.indexOf("<")+1, current.indexOf(">")-current.indexOf("<") -1);
                } 
            } 
        }
        if(EMAIL_REGEX.test(current)) {
            validEmails.push(current);
        } else {
            invalidEmails.push(current);
        }
    }               
}

提供的链接或答案都不是这个问题的最佳答案。以下是解决问题的方法:

/*
* regex checks: must start with the beginning of a word or a left caret
* must end with either the end of a word or a right caret
* can handle example.example.com as possible domain
* email username can have + - _ and .
* not case sensitive
*/
var EMAIL_REGEX = /(\<|^)[\w\d._%+-]+@(?:[\w\d-]+\.)+(\w{2,})(\>|$)/i;  
var emails = emailList.trim().split(',');  
var validEmails = [];  
var invalidEmails = [];  

for (var i = 0; i < emails.length; i++) {  
    var current = emails[i].trim();
    if(current !== "") {
        //if something matching the regex can be found in the string
        if(current.search(EMAIL_REGEX) !== -1) {
            //check if it has either a front or back bracket
            if(current.indexOf("<") > -1 || current.indexOf(">") > -1) {
                //if it has both, find the email address in the string
                if(current.indexOf("<") > -1 && current.indexOf(">") > -1) {
                    current = current.substr(current.indexOf("<")+1, current.indexOf(">")-current.indexOf("<") -1);
                } 
            } 
        }
        if(EMAIL_REGEX.test(current)) {
            validEmails.push(current);
        } else {
            invalidEmails.push(current);
        }
    }               
}

顺便问一下,你怎么了xyz@example.com?regex不是完全解析/验证所有合法电子邮件地址的最佳工具。谷歌将为您提供许多其他方法的例子。@EswarRajeshPinapala不确定您所说的“它有什么问题”是什么意思。为什么必须用regex来完成?这是家庭作业吗?似乎这个问题已经在这里被问过和讨论过了:从其中一个答案来看,这个参考讨论了使用正则表达式的细节:顺便问一下,有什么问题吗xyz@example.com?regex不是完全解析/验证所有合法电子邮件地址的最佳工具。谷歌将为您提供许多其他方法的例子。@EswarRajeshPinapala不确定您所说的“它有什么问题”是什么意思。为什么必须用regex来完成?这是家庭作业吗?似乎这个问题已经在这里被问过并讨论过了:从其中一个答案来看,这是一个讨论使用正则表达式细节的参考:关于需要做不止一个的事情,你可能是对的。但是,您提供的一个也允许像xyz这样的事情通过,我不希望这样。而且,首先拆分它完全可以。您可能需要执行多个操作。但是,您提供的这个也允许像xyz这样的东西通过,我不希望这样。而且,首先拆分它完全可以。这似乎没有解决我提供的任何示例。至少,不是通过使用我在O中提供的链接测试它
这似乎没有解决我提供的任何例子。至少,不是使用我在OP中提供的链接进行测试。你的正则表达式没有执行我想要的检查,但我喜欢你执行的括号检查。这是很好的一部分,你可以将正则表达式更改为任何你想要的电子邮件验证。非电子邮件部分似乎不需要验证,因此任何可靠的电子邮件验证正则表达式都可以工作。您的正则表达式没有执行我想要的检查,但我喜欢您执行的括号检查。这是很好的一部分,您可以将正则表达式更改为任何电子邮件验证。非电子邮件部分似乎不需要验证,因此任何可靠的电子邮件验证正则表达式都可以工作。