ruby on rails验证正则表达式逗号分隔的电子邮件地址

时间:2011-04-16 21:13:04

标签: ruby regex

我是regex的新手,需要解析以逗号分隔的电子邮件地址扩展输入(@符号后的所有内容)。例如:

foo.bar,foo.bar.baz,FOO-bar.baz

我知道字符串中没有空格。也。以下是我想用于一个电子邮件扩展的正则表达式:

/[a-z\d\-.]+\.[a-z]+\z/i

如何修改Ruby中的正则表达式以使用逗号分隔的多个扩展名?

谢谢!

3 个答案:

答案 0 :(得分:2)

\A(([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})[, ]?)*\Z

上述正则表达式适用于以逗号分隔的0个或更多个电子邮件地址。您可能希望在保存或使用它来删除尾随逗号之前选择(“,”)字符串。

答案 1 :(得分:0)

尝试

/(,{0,1}[a-zA-Z_]+[^.]*\.[a-zA-Z]{2,6})+/i

基于我的测试:

p 'True' if 'foo.bar,foo.bar.baz,foo-bar.baz' =~ /(,{0,1}[a-zA-Z_]+[^.]*\.[a-zA-Z]{2,6})/i

将给出

True

答案 2 :(得分:0)

您最好将列表拆分为组件,然后检查每个组件:

hosts  = 'foo.bar,foo.bar.baz,foo-bar.baz'
all_ok = true
hosts.split(/\s*,\s*/).each do |host|
    all_ok = false unless(host =~ /[a-z\d\-.]+\.[a-z]+\z/i)
end

这可能不是一个单行,但在未来六个月可能会更容易理解(当然,除非你的正则表达式更强)。