【问题标题】:How can I allow a regex to be blank?如何允许正则表达式为空白?
【发布时间】:2015-03-19 10:19:16
【问题描述】:

我正在尝试制作一个只接受有效电子邮件或空白电子邮件的表单。我认为这将是这样的:

EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i OR ""
validates :email, format: { with: EMAIL_REGEX }

或许

EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
BLANK_REGEX = 
validates :email, format: { with: EMAIL_REGEX OR BLANK_REGEX }

但我不知道正确的语法。有谁知道这样做的正确方法吗?

【问题讨论】:

  • @sawa 我不知道,谢谢。

标签: ruby-on-rails ruby regex validation ruby-on-rails-4


【解决方案1】:

只需将您的正则表达式设为可选,以使您的正则表达式也匹配空白电子邮件。

EMAIL_REGEX = /\A(?:[\w+\-.]+@[a-z\d\-.]+\.[a-z]+)?\z/i

EMAIL_REGEX = /^(?:[\w+\-.]+@[a-z\d\-.]+\.[a-z]+)?$/i

要使正则表达式可选,请将整个正则表达式包含在非捕获组 (?:...) 中,然后在该组旁边添加 ?

【讨论】:

  • 你能稍微扩展一下吗?如何使正则表达式可选?
  • 你也可以这样做^(?:[\w+\-.]+@[a-z\d\-.]+\.[a-z]+|)$| 或运算符有助于匹配空行..
【解决方案2】:

@avinash-raj 指出的方法是完美的。但是,您可以在验证中使用 allow_blank: true。你的代码应该是这样的:

validates :email, format: { with: /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i}, allow_blank: true 

【讨论】:

    猜你喜欢
    • 2012-10-09
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    相关资源
    最近更新 更多