【问题标题】:ruby on rails validation regex comma separated email addressesruby on rails 验证正则表达式逗号分隔的电子邮件地址
【发布时间】:2011-04-16 21:13:03
【问题描述】:

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

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

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

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

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

谢谢!

【问题讨论】:

  • 您的问题不够具体。你能举一个你想要的输入和输出的例子吗?

标签: ruby regex


【解决方案1】:
\A(([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})[, ]?)*\Z

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

【讨论】:

    【解决方案2】:

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

    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
    

    这可能不是单行的,但在六个月后可能会更容易理解(当然,除非你的 regex-fu 变得更强大)。

    【讨论】:

    • 谢谢!但是,我正在编写一些测试用例,我认为我原来的正则表达式有点错误。像 foo|bar.org 这样的东西正在过去。我认为原因是因为它与“bar.org”匹配。不是正则表达式专家,但除非它成功匹配整个事物,否则有没有办法失败?
    • 您需要将正则表达式锚定在两端(而不仅仅是末尾)以处理“foo|bar.org”,类似于/\A[a-z\d\-.]+\.[a-z]+\z/i。也许在Rubular 待一段时间会很有收获。
    【解决方案3】:

    试试

    /(,{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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-22
      • 2011-09-13
      • 1970-01-01
      • 1970-01-01
      • 2013-09-29
      • 2017-06-10
      • 1970-01-01
      相关资源
      最近更新 更多