为ActiveRecord模型强制使用8位数字

时间:2011-11-29 15:21:45

标签: ruby regex ruby-on-rails-3 activerecord

我在我的模型中使用正则表达式获取一个必须长度为8的数字。我这样做:

  

validates_uniqueness_of:my_number,:with => / ^ [0-9] {8} $ /,:message => “错误消息”

但这不起作用,如果我设置输入“hahaha”,我会得到“错误信息”,如果我设置 123 ,那么我将获得成功输出,但那是错的......我试着得到一个接受总是精确8位的正则表达式......

2 个答案:

答案 0 :(得分:4)

更新:在评论中为@tadman points out,在Rails 3中,您可以combine validators

validates :my_number, :uniqueness => true, :format => { :with => /^[0-9]{8}$/ }

使用旧式验证:

validates_uniqueness_of不接受with选项,只有validates_format_of。所以你可以试试:

validates_format_of :my_number, :with => /^[0-9]{8}$/, \
    :message => "8 digits, please."

要验证唯一性,您可能需要添加另一个约束。

答案 1 :(得分:4)

大概:

validates_format_of :my_number, :with =>  /\A[0-9]{8}\Z/
validates_uniqueness_of :my_number