匹配在Ruby中用逗号分隔的电子邮件

时间:2013-12-16 18:51:37

标签: ruby-on-rails ruby regex

我希望匹配用逗号分隔的电子邮件:

'a@a.com, b@b.com, c@c.com'

我想重用Devise gem中定义的正则表达式:

 /\A[^@\s]+@([^@\s]+\.)+[^@\s]+\z/ 

知道我不会RFC2822兼容,但我不在乎,因为我只需要一个非常简单的电子邮件验证。

我尝试匹配逗号分隔的电子邮件如下:

/\A(([^@\s]+@([^@\s]+\.)+[^@\s]+),)*\s([^@\s]+@([^@\s]+\.)+[^@\s]+)\z/
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
     everything like 'a@a.com,'   spaces   last element 'c@c.com'
     many times

不幸的是,这没有按预期工作。它匹配字符串(注意尾随逗号):

a@a.com, b@b.com, c@c.com,

有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:1)

您只匹配最后一个逗号后的空格,将\s移动到重复的组。此外,正如Platinum Azure提到的[^@\s]包括逗号,您可以通过将其更改为[^@\s,]来避免这种情况

/\A(([^@\s]+@([^@\s]+\.)+[^@\s,]+),\s)*([^@\s]+@([^@\s,]+\.)+[^@\s,]+)\z/