From: gabriele renzi Date: 2006-03-30T07:38:44+09:00 Subject: Re: %r regex matching is ignoring my leading zeros Dara Sanderson ha scritto: > Hello, > > I hope someone can help me or at least confirm that I'm not going > insane. > > I have a model in which I'm trying to validate information before it > saves. > One particular field is for and expiration date. The code in my model > to do the validation looks like this: > > validates_format_of :expiration, > :with => %r{^[\d]{4,4}$}, > :message => "must be formatted (mmyy)" > > > The problem is if someone enter a date that starts with a zero like > "0309" The validation somehow just doesn't "see" the leading zero and > keeps returning an error as though the user isn't submitting it > properly. I did verify that the controller is definetly sending all > four digits in the post. I think I'd write the Regexp as: %r{^\d{4}$} Anyway, you one seem to work as expected on my box in irb: irb(main):001:0> x=/^[\d]{4,4}$/ => /^[\d]{4,4}$/ irb(main):002:0> x2=%r|^[\d]{4,4}$| => /^[\d]{4,4}$/ irb(main):003:0> x.match "0102" => # irb(main):004:0> x2.match "0102" => # and in rails: $cat app\models\foo.rb class Foo < ActiveRecord::Base validates_format_of :bar, :with=>%r{^\d{4}$} end >> f=Foo.new => #""}> >> f.bar ="0123" => "0123" >> f.save => true >> f.bar ="012" => "012" >> f.save => false what version of ruby are you running? Maybe it could have been some damn pesky problem like not having reloaded the model (this happened to me many times :) ?