我尝试使用正则表达式限制数字行,我试过这个,不像我想的那样工作。
我的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
答案 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
,因此它也适用于其他操作系统。