【问题标题】:Rails validate format. "001" should be valid but not "1" or 1. /\A\d\d\d\z/ not workingRails 验证格式。 “001”应该是有效的,但不是“1”或1。/\A\d\d\d\z/ 不工作
【发布时间】:2015-05-26 20:41:29
【问题描述】:

我在我的一个模型中尝试测试以下验证时遇到了问题:

validate :clientnumber, format: { with: /\A\d\d\d\z/ }

本质上,我希望允许“001”成为有效条目,但不允许“1”。当我运行这些测试时:

it do
   should allow_value('880', '546', '001', '999').for(:clientnumber)
end
it do
   should_not allow_value('foo', '8ar', '1' ).for(:clientnumber)
end 

我得到以下结果。

should allow clientnumber to be set to any of ["880", "546", "001", "999"]

通过但是,

should not allow clientnumber to be set to any of ["foo", "8ar", "1"] (FAILED - 1)

失败

最初我什至也尝试在那里测试纯整数,但意识到即使字符串形式通过也没有实际意义。在 rubular 上测试正则表达式时,它不会返回任何与单个或 2 位数字的匹配项。最终,我希望它只允许格式为 /\d\d\d/ 的字符串(即表上的数据类型)。我错过了什么导致“001”和“1”都通过?

我还注意到,在测试整数时,即使整数位于无效字符串编号的右侧,测试也会失败。

【问题讨论】:

  • 我不确定为什么正则表达式不起作用,但是如果您添加了length: { minimum : 3 } 会怎样?
  • 另外,也许/\A\d{3}\z/ 会起作用。

标签: ruby-on-rails regex rspec shoulda


【解决方案1】:

我认为您使用了无效的验证助手,即 validate 而不是 validates

【讨论】:

    猜你喜欢
    • 2020-04-15
    • 1970-01-01
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    • 2012-01-27
    • 1970-01-01
    • 2013-10-01
    相关资源
    最近更新 更多