如何允许正则表达式为空?
How can I allow a regex to be blank?
我正在尝试制作一个只接受有效电子邮件或空白电子邮件的表单。我认为这将是这样的:
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 }
但我想不出正确的语法。有谁知道这样做的正确方法吗?
只需将您的正则表达式设为可选,即可使您的正则表达式也匹配空白电子邮件。
EMAIL_REGEX = /\A(?:[\w+\-.]+@[a-z\d\-.]+\.[a-z]+)?\z/i
或
EMAIL_REGEX = /^(?:[\w+\-.]+@[a-z\d\-.]+\.[a-z]+)?$/i
要使正则表达式可选,请将整个正则表达式包含在非捕获组中 (?:...)
,然后在该组旁边添加一个 ?
。
@avinash-raj 指出的方法是完美的。但是,您可以在验证中使用 allow_blank: true 。你的代码应该是这样的:
validates :email, format: { with: /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i}, allow_blank: true
我正在尝试制作一个只接受有效电子邮件或空白电子邮件的表单。我认为这将是这样的:
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 }
但我想不出正确的语法。有谁知道这样做的正确方法吗?
只需将您的正则表达式设为可选,即可使您的正则表达式也匹配空白电子邮件。
EMAIL_REGEX = /\A(?:[\w+\-.]+@[a-z\d\-.]+\.[a-z]+)?\z/i
或
EMAIL_REGEX = /^(?:[\w+\-.]+@[a-z\d\-.]+\.[a-z]+)?$/i
要使正则表达式可选,请将整个正则表达式包含在非捕获组中 (?:...)
,然后在该组旁边添加一个 ?
。
@avinash-raj 指出的方法是完美的。但是,您可以在验证中使用 allow_blank: true 。你的代码应该是这样的:
validates :email, format: { with: /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i}, allow_blank: true