如何让正则表达式为空?

时间:2015-01-21 01:15:54

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

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

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 }

但我无法弄清楚正确的语法。有谁知道这样做的正确方法?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

只需让你的正则表达式可选,让你的正则表达式也匹配空白电子邮件。

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

OR

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

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