Ruby on rails 如何在RubyonRails中为精确的3位数字编写验证?
在我的控制器中,我有:Ruby on rails 如何在RubyonRails中为精确的3位数字编写验证?,ruby-on-rails,regex,validation,Ruby On Rails,Regex,Validation,在我的控制器中,我有: validates_presence_of :order_of_importance, :on => :create, :with => /^\d{3}$/ 但如果他们键入以下内容,这仍然会有效(我认为): 4231 但我想确保他们只键入3位字符 有什么想法吗?/^\d{3}$/应该这样做。它确保数字在要匹配的字符串末端开始和结束 此外,您不需要在结尾处使用i,因为数字没有大小写。您可以试试 validates_length_of :order_of_im
validates_presence_of :order_of_importance, :on => :create, :with => /^\d{3}$/
但如果他们键入以下内容,这仍然会有效(我认为):
4231
但我想确保他们只键入3位字符
有什么想法吗?
/^\d{3}$/
应该这样做。它确保数字在要匹配的字符串末端开始和结束
此外,您不需要在结尾处使用i
,因为数字没有大小写。您可以试试
validates_length_of :order_of_importance, :maximum => 3
或许“更具讽刺意味”的方式是:
validates_length_of :order_of_importance, :on => :create, :is => 3
validates_numericality_of :order_of_importance, :on => :create
隐马尔可夫模型。。事实上,这似乎没有验证。除了数字之外还有什么吗?即使是空白也会把事情搞砸。如果只有三位数字,正则表达式将匹配。如果您需要“字符串中的三位数字”,请尝试:
/(?:^ | \D)\D{3}(?:\D |$)/
@Kolik写的是正确的,但是您应该使用validates_format_of而不是validates_presence_of来使用正则表达式/\a\D{5}\z/
rails不喜欢
和$
这样的锚