Jquery Regex-CSV电子邮件地址可以,但如何防止以逗号结尾?

Jquery Regex-CSV电子邮件地址可以,但如何防止以逗号结尾?,jquery,regex,Jquery,Regex,我正在使用jQuery.validate插件。我编写了一个自定义规则,允许使用逗号分隔的电子邮件地址,如下所示: $.validator.addMethod('csvEmail', function (value, element) { return this.optional(element) || /^((([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{

我正在使用jQuery.validate插件。我编写了一个自定义规则,允许使用逗号分隔的电子邮件地址,如下所示:

$.validator.addMethod('csvEmail', function (value, element) {
            return this.optional(element) || /^((([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))+(,|, |$))*$/.test(value);
        }, "Please enter a valid email address or multiple valid addresses separated by a comma.");
$.validator.addMethod('csvEmail',函数(值,元素){
返回此.optional(element)| |/^(([^()\[\]\\,;:\s@“]+(\.[^()\[\]\,;:\s@“]+)*)(“+”)((\[[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]}.[1,3}.[0-9]}.[1,3}.+++]1,3}.[1,3}.]测试值])/([a-zA 0-0-9]+]1242],[1,3}.-+];
},“请输入一个有效的电子邮件地址或多个用逗号分隔的有效地址。”);
这适用于:
test@test.com, example@test.com< /代码>,同样没有中间的空间。

但这正是我陷入困境的地方,因为它也适用于:
test@test.com,
这就是我的问题


正则表达式的哪一部分需要更改以禁止以逗号结尾的有效电子邮件地址?

表达式的最后一部分是:

)+(,|, |$))*$
请注意,
,|,
相当于
,?
(或者可能
,\s*
更灵活)

防止尾随逗号的一种方法是使用负前瞻:

)+(,\s?(?!$)|$))*$
这表示“匹配逗号后跟可选空格,但只有在不后跟输入结尾时才匹配”


更正常的做法是使用不同的结构
a(BA)*
,而不是
(a(B |$)*
,但很明显,重复在这里很容易出错

让我们来分部分。。。首先介绍如何获取有效的域元素。它由字母数字字符串组成,可以在两个字符之间包含连字符,但不能在末尾,也不能重复。可以使用此regexp执行此操作:

[a-zA-Z0-9](-?[a-zA-Z0-9])*
你看,由于连字符是可选的,不带连字符的字母数字字符串允许有任何长度,它们不能在任何一端,也不能重复连字符(连字符总是被字母数字包围。这将形成一个域组件,一个或多个域组件由点分隔……我们使用相同的方法编写:

<EXP>(\.<EXP>)*
这将与电子邮件地址的域部分匹配。为了构成其余部分,我们允许使用任何字符(除了
@
),因为它们用于分隔组件:

[^@,\s]+
因此,我们的正则表达式导致:

[^@,\s]+@[a-zA-Z0-9](-?[a-zA-Z0-9])*(\.[a-zA-Z0-9](-?[a-zA-Z0-9])*)*
然后我们允许任何重复,用
\s*,\s*
分隔(逗号被任意数量的空格包围):

将是一个表达式,可以根据需要解析所有内容。有关其工作原理的演示,请参阅

它看起来很复杂,但你只需要写一次


希望这会有所帮助。

我刚刚了解了负面表情的背后。我已将结尾改为
(?电子邮件地址的Regex没有那么简单,请看一下这些网站:;
[^@,\s]+@[a-zA-Z0-9](-?[a-zA-Z0-9])*(\.[a-zA-Z0-9](-?[a-zA-Z0-9])*)*
<EXP>(\s*,\s*<EXP>)*
[^@,\s]+@[a-zA-Z0-9](-?[a-zA-Z0-9])*(\.[a-zA-Z0-9](-?[a-zA-Z0-9])*)*(\s*,\s*[^@,\s]+@[a-zA-Z0-9](-?[a-zA-Z0-9])*(\.[a-zA-Z0-9](-?[a-zA-Z0-9])*)*)*