2011-10-05 58 views
3

在我的控制器我有这样的:如何在ruby-on-rails上写一个3位数的验证?

validates_presence_of :order_of_importance, :on => :create, :with => /^\d{3}$/ 

但是,这仍然会验证(我认为),如果他们键入:

4231 

但我想,以确保他们类型以3位数字符号表示。

任何想法?

回答

9

/^\d{3}$/应该这样做。它确保数字在字符串的末尾开始和结束以匹配。

另外,最后不需要i,因为数字不是整体。

+0

嗯..其实似乎没有验证。 – Trip

+0

除了数字还有什么?即使是空白也会搞砸了。如果只有三位数字,正则表达式将匹配。如果您需要“字符串中的三位数”,请尝试:'/(?:^ | \ D)\ d {3}(?:\ D | $)/' –

+4

@Kolik写的是正确的,但您应该使用validates_format_of而不是validates_presence_of来使用正则表达式 – lucapette

1

您可以尝试

validates_length_of :order_of_importance, :maximum => 3 
0

一个可能被 “更Railsy” 的方法是:

validates_length_of  :order_of_importance, :on => :create, :is => 3 
validates_numericality_of :order_of_importance, :on => :create