Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何允许正则表达式为空?_Ruby On Rails_Ruby_Regex_Validation_Ruby On Rails 4 - Fatal编程技术网

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