Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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 Rails验证格式&引用;001“;应该是有效的,但不是;1“;或1/\A\d\d\d\z/不工作_Ruby On Rails_Regex_Rspec_Shoulda - Fatal编程技术网

Ruby on rails Rails验证格式&引用;001“;应该是有效的,但不是;1“;或1/\A\d\d\d\z/不工作

Ruby on rails Rails验证格式&引用;001“;应该是有效的,但不是;1“;或1/\A\d\d\d\z/不工作,ruby-on-rails,regex,rspec,shoulda,Ruby On Rails,Regex,Rspec,Shoulda,在尝试在我的一个模型中测试以下验证时,我遇到了一个问题: 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'

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

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”都通过


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

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

我不确定正则表达式为什么不起作用,但是如果您添加了
长度:{minimum:3}
?另外,可能
/\A\d{3}\z/
会起作用。