我有一个包含数字字段的表单
std::initializer_list<std::string>
它允许2.0,但我希望它不应该允许2.0。 怎么做?
答案 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