Ruby on rails 如何允许正则表达式为空?
我正在尝试制作一个只接受有效电子邮件或空白电子邮件的表单。我认为这将是以下几点:Ruby on rails 如何允许正则表达式为空?,ruby-on-rails,ruby,regex,validation,ruby-on-rails-4,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 = /\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
或
要使正则表达式成为可选的,请将整个正则表达式封装在一个非捕获组
(?:…)
,然后在该组旁边添加一个?
。由@avinash raj提出的方法是完美的。但是,您可以在验证中使用allow\u blank:true。您的代码应该如下所示:
validates :email, format: { with: /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i}, allow_blank: true
你能在这个问题上再扩展一点吗?如何使正则表达式成为可选的?您也可以这样做
^(?:[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\.$
<代码> < <代码>或运算符有助于匹配空行。@ SAWA我不知道,谢谢。
validates :email, format: { with: /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i}, allow_blank: true