数字验证不接受0作为数字

时间:2018-03-29 00:32:34

标签: ruby-on-rails ruby

我有一个联系电话,并希望验证它是11位数。我希望它接受01234567891

我正在使用验证:

validates :contactNo,
          :length => {
                      :is => 11,
                      :format => { with: /[0-9]+/ },
                      :greater_than_or_equal_to => 0,
                      :message => "Contact number is not valid"
                     }

它不接受0作为数字。

我如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

保存为整数将导致ActiveRecord对其进行类型转换,这将使前导0掉落,这将使实际长度为10而不是11.如果您想要前导0,则需要将其保存为字符串所以ActiveRecord没有对它进行类型转换。

此外,您似乎以不正确的方式混合单独的验证。

可能你想要这个:

validates :contactNo,
  :length => {
    :is => 11,
    :message => "Contact number must be exactly 11 digits"
  },
  :format => {
    :with => /[0-9]+/,
    :message => "Contact number can only contain the digits 0-9"
  }

答案 1 :(得分:2)

您可以使用精确数字代替+

,仅使用正则表达式来解决验证问题
validates :contactNo, format: /[0-9]{11}/, message: 'must be eleven digits (0-9)'

但是正如@Nathan所指出的那样,你不能使用整数字段,因为01是整数形式,1是整数。