用于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中提供的链接进行测试。你的正则表达式没有执行我想要的检查,但我喜欢你执行的括号检查。这是很好的一部分,你可以将正则表达式更改为任何你想要的电子邮件验证。非电子邮件部分似乎不需要验证,因此任何可靠的电子邮件验证正则表达式都可以工作。您的正则表达式没有执行我想要的检查,但我喜欢您执行的括号检查。这是很好的一部分,您可以将正则表达式更改为任何电子邮件验证。非电子邮件部分似乎不需要验证,因此任何可靠的电子邮件验证正则表达式都可以工作。