【问题标题】:jQuery validate - CSV email regex without trailing commajQuery 验证 - 没有尾随逗号的 CSV 电子邮件正则表达式
【发布时间】:2020-01-20 03:27:39
【问题描述】:

我正在为 .validate 中的自定义验证工作的代码如下。我想允许用户输入以逗号分隔的电子邮件地址,但我坚持使用我的正则表达式来禁止尾随逗号。

aaa@foo.com, bbb@bar.com = 好的

aaa@foo.com,bbb@bar.com = 好的

aaa@foo.com, = 不行(注意这里也是一个尾随空格)

aaa@foo.com, = 不行

但是我的问题是下面的都可以。

$.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.");

【问题讨论】:

    标签: jquery regex


    【解决方案1】:

    regex 表达式的问题在于您匹配第一列aaa@foo.com 以及,,(space)(end of the line)。然后,您使用* 检查它是否重复0 或更多次。

    但是,在这里,您不能使用*+ 符号。您希望它匹配2总是。因此,您希望将您的 regex 修复为以下内容:

    ^((([^<>()\[\]\\.,;:\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,}))+(,|, |$)){2}$
    

    如果您没有注意到,我将最后的$ 之前的* 删除,并用{2} 替换它。这是因为你想要 2 场比赛。


    但是,我会使用以下 regex 表达式:

    (.+?)@(.+)\.(.+),[^\S\r\n]*(.+?)@(.+)\.(.+)
    

    不管怎样,两者都返回你想要的结果,出自以下:

    aaa@foo.com, bbb@bar.com
    aaa@foo.com,bbb@bar.com
    aaa@foo.com, 
    aaa@foo.com,
    

    它们仅突出显示以下内容:

    aaa@foo.com, bbb@bar.com
    aaa@foo.com,bbb@bar.com
    

    如果您想自己尝试一下,click here,并在两者之间更改regex。他们都工作。

    【讨论】:

      猜你喜欢
      • 2012-09-25
      • 2014-06-22
      • 1970-01-01
      • 2012-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-14
      相关资源
      最近更新 更多