2

我有一个 Rails 应用程序,在“新”视图的某个字段中,用户可以输入一些总是看起来像这样的字符串:

1303031110012015¿999999999999999

(因为是磁卡读卡器获取的会员卡号)

我想要做的是在模型中使用该字段的正则表达式进行验证,这让我只捕获没有它的“¿”之前的数字,例如:

(在模型中):

validates_format_of :card_id, :with => /regex/i

并且无论用户是否输入整个内容(因为机器总是这样做),我只想保存在数据库中:

1303031110012015

怎样才能做到这一点?哪个是正确的正则表达式?

4

1 回答 1

1

验证检查数据是否有效,它们不会清理内容。您希望before_validation在验证之前进行回调以清理它们。像这样的东西:

before_validation :clean_up_card_id, :if => :card_id_changed?

#...

private

def clean_up_card_id
    self.card_id = self.card_id.to_s.scan(/^\d+/)[0]
end    

然后,因为你很偏执并且知道每个人都真的想出去,所以也要验证它:

validates :card_id, :format => { :with => /\A\d+\z/, :msg => 'It done broke!' }

如果您知道它应该多长时间,请也验证它(使用:length或通过将+正则表达式中的 替换为适当的{m,n}限制)。

于 2012-11-14T03:32:37.847 回答