如何验证字段不包含。而且,

时间:2016-07-21 18:16:51

标签: html ruby-on-rails ruby html5

我有一个包含数字字段的表单

std::initializer_list<std::string>

它允许2.0,但我希望它不应该允许2.0。 怎么做?

2 个答案:

答案 0 :(得分:2)

你在正则表达式上缺少锚点,导致&#34; 2&#34; in&#34; 2.0&#34;匹配(在某些浏览器上)。要使用的正则表达式是:

<%= ... pattern: "^\d+$" %>

您可能也应该对模型进行验证,因为所有浏览器都可能无法遵守HTML5模式属性。只需添加:

class YourModel < ActiveRecord::Base
  validates :contribution_to_sales, numericality: { only_integer: true }
  ...
end

答案 1 :(得分:-1)

将以下内容添加到模型中:

 validate :format_numbers

   def format_numbers
      if self.number_field.include?(',') || self.number_field.include?('.')
         errors.add(base: "Do not add commas or periods please")
      end
   end

这是验证的一种方式,但我更喜欢用户友好的方式,删除用户可能添加的某些内容,我知道我不想要,然后继续处理表单,而不是报告错误。这可以通过删除逗号来完成,因为你不想要句号,我想我们也可以在句号的右边除去任何东西。要以这种方式执行此操作,您将在模型中执行以下操作而不是上述操作:

  validate :format_numbers


     def format_numbers
       self.number_field = self.number_field.gsub(/\.\d+/, '') #This will remove any period and all numbers to the right of that period.
       self.number_field = self.number_field.gsub(',','') #This will remove all commas throughout. 
     end

这提供了更流畅的用户体验,因为他们现在可以在表单字段中键入2,000.00并将其另存为2000