我希望匹配用逗号分隔的电子邮件:
'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,
有人可以帮我这个吗?
答案 0 :(得分:1)
您只匹配最后一个逗号后的空格,将\s
移动到重复的组。此外,正如Platinum Azure提到的[^@\s]
包括逗号,您可以通过将其更改为[^@\s,]
来避免这种情况
/\A(([^@\s]+@([^@\s]+\.)+[^@\s,]+),\s)*([^@\s]+@([^@\s,]+\.)+[^@\s,]+)\z/