rails:validates_format_of使用正则表达式来限制数字行

时间:2017-03-25 08:56:52

标签: ruby-on-rails ruby regex

我尝试使用正则表达式限制数字行,我试过这个,不像我想的那样工作。

我的Product模型只有info属性,并且只有一个验证

validates_format_of :info, with: /(.*\n){,3}
在rails console中

> product = Product.new
> product.info = <<-INFO
">   line one  
">   line two
">   line three
">   line four
"> INFO
> product.valid? 
=> true

我认为这应该返回false,因为info的数字超过 3

1 个答案:

答案 0 :(得分:0)

您可以使用自定义验证来检查字符串中的行数。在我看来,它提供了比使用正则表达式更好的可读性。

validate :info_cannot_have_many_lines
def info_cannot_have_many_lines
  error << 'Info can not have more than 3 lines' if info.lines.count > 3
end

如果你想坚持使用Regexp:

/\A(.*(\r\n|\r|\n)){,3}\z/

你需要使用锚点:\ A(字符串的开头)和\ z(字符串的结尾)

编辑:我想最好使用(\r\n|\r|\n)而不仅仅是\n,因此它也适用于其他操作系统。