我试图制作一个只接受有效电子邮件或空白电子邮件的表单。我认为这将是这样的:
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 }
但我无法弄清楚正确的语法。有谁知道这样做的正确方法?
答案 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
要使正则表达式可选,请将整个正则表达式包含在非捕获组(?:...)
中,然后在该组旁边添加?
。