Hi! This problem(in model): validates :some_digits_collection, :presence => true, :format => { :with => /^\d*$/, :message => "Must contain only digits!" } So, :some_digits_collection must match only digits. But when I puts "123f"(for example) in my form, it matches too and there no errors! Why? -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On Aug 14, 2011, at 2:29 PM, Misha Ognev wrote:> Hi! This problem(in model): > > validates :some_digits_collection, :presence => true, :format => > { :with > => /^\d*$/, :message => "Must contain only digits!" } > > So, :some_digits_collection must match only digits. But when I puts > "123f"(for example) in my form, it matches too and there no errors! > Why?That''s really curious. I tested your regexp at Rubular, and it really does match and work the way you want it to. What gets stored in the database after this passes? Perhaps the input value is being cast to an integer for storage, and so the trailing letters are being stripped out. IF the validation happens after the cast, that could explain it -- but only if the value that ends up being stored is actually free of letters. Walter -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
It matches because it''s true. The expressions states any number of digits before the end of line. It does not state exclusively digits. On Aug 14, 2011, at 12:19 PM, Walter Lee Davis wrote:> > On Aug 14, 2011, at 2:29 PM, Misha Ognev wrote: > >> Hi! This problem(in model): >> >> validates :some_digits_collection, :presence => true, :format => { :with >> => /^\d*$/, :message => "Must contain only digits!" } >> >> So, :some_digits_collection must match only digits. But when I puts >> "123f"(for example) in my form, it matches too and there no errors! Why? > > That''s really curious. I tested your regexp at Rubular, and it really does match and work the way you want it to. What gets stored in the database after this passes? Perhaps the input value is being cast to an integer for storage, and so the trailing letters are being stripped out. IF the validation happens after the cast, that could explain it -- but only if the value that ends up being stored is actually free of letters. > > Walter > > -- > You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. > To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. > For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en. >-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On Aug 14, 2011, at 4:42 PM, Rafael Ubaldo wrote:> It matches because it''s true. The expressions states any number of > digits before the end of line. It does not state exclusively digits.That wasn''t what I got from it on Rubular. The ^ and $ surrounding the \d* mean the entire line is considered, and if you type in the precise regexp on rubular.com, and then type in 123f in the test string box, you''ll see that it matches 1,12,123, and then reports "no match" the moment you type the f. Walter> On Aug 14, 2011, at 12:19 PM, Walter Lee Davis wrote: > >> >> On Aug 14, 2011, at 2:29 PM, Misha Ognev wrote: >> >>> Hi! This problem(in model): >>> >>> validates :some_digits_collection, :presence => true, :format => >>> { :with >>> => /^\d*$/, :message => "Must contain only digits!" } >>> >>> So, :some_digits_collection must match only digits. But when I puts >>> "123f"(for example) in my form, it matches too and there no >>> errors! Why? >> >> That''s really curious. I tested your regexp at Rubular, and it >> really does match and work the way you want it to. What gets stored >> in the database after this passes? Perhaps the input value is being >> cast to an integer for storage, and so the trailing letters are >> being stripped out. IF the validation happens after the cast, that >> could explain it -- but only if the value that ends up being stored >> is actually free of letters. >> >> Walter >> >> -- >> You received this message because you are subscribed to the Google >> Groups "Ruby on Rails: Talk" group. >> To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org >> . >> To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org >> . >> For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en >> . >> > > -- > You received this message because you are subscribed to the Google > Groups "Ruby on Rails: Talk" group. > To post to this group, send email to rubyonrails- > talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org > . > For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en > . >-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
> Perhaps the input value is being cast to > an integer for storage, and so the trailing letters are being stripped > out.This is one simple way to check this: puts "f123" to field. "f123".to_i => 0 "123f".to_i => 123 But in Rails validation, "f123" is validates too. Michael -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
But 0 passes this regex -- it''s one digit. If you wanted to ensure that you had n or more digits, you would use a regex like this: ^\d{2,}$ to match two or more digits. Or, you could check to see if the first digit was larger than a 0 if that first digit cannot ever be 0: ^[1-9]\d*$ That will match 1, but not 0, and also 10, 11, 12 ... Walter On Aug 14, 2011, at 6:59 PM, Misha Ognev wrote:>> Perhaps the input value is being cast to >> an integer for storage, and so the trailing letters are being >> stripped >> out. > > This is one simple way to check this: puts "f123" to field. > "f123".to_i => 0 > "123f".to_i => 123 > But in Rails validation, "f123" is validates too. > > Michael > > -- > Posted via http://www.ruby-forum.com/. > > -- > You received this message because you are subscribed to the Google > Groups "Ruby on Rails: Talk" group. > To post to this group, send email to rubyonrails- > talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org > . > For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en > . >-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Rafael Ubaldo wrote in post #1016660:> It matches because it''s true. The expressions states any number of > digits before the end of line. It does not state exclusively digits. >Wrong. The regex says: 1) match start of line(or just after a newline) 2) match a digit 0 or more times 3) match just before a newline (or end of line) You cannot match start of line, followed by any number of digits, followed by the end of line unless the string contains only digits. -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On Aug 14, 7:29 pm, Misha Ognev <li...-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> Hi! This problem(in model): > > validates :some_digits_collection, :presence => true, :format => { :with > => /^\d*$/, :message => "Must contain only digits!" } > > So, :some_digits_collection must match only digits. But when I puts > "123f"(for example) in my form, it matches too and there no errors! Why?Is this column an integer column? If so, then I seem to recall that at the point that validations run rails has already converted the argument to an integer, i.e. it will have converted your 123f to 123 and so your validation passes. Fred> > -- > Posted viahttp://www.ruby-forum.com/.-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Agreed. @OP: You should try this instead: http://edgeguides.rubyonrails.org/active_record_validations_callbacks.html#numericality On Mon, Aug 15, 2011 at 2:41 PM, Frederick Cheung < frederick.cheung-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > > On Aug 14, 7:29 pm, Misha Ognev <li...-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote: > > Hi! This problem(in model): > > > > validates :some_digits_collection, :presence => true, :format => { :with > > => /^\d*$/, :message => "Must contain only digits!" } > > > > So, :some_digits_collection must match only digits. But when I puts > > "123f"(for example) in my form, it matches too and there no errors! Why? > > Is this column an integer column? If so, then I seem to recall that at > the point that validations run rails has already converted the > argument to an integer, i.e. it will have converted your 123f to 123 > and so your validation passes. > > Fred > > > > -- > > Posted viahttp://www.ruby-forum.com/. > > -- > You received this message because you are subscribed to the Google Groups > "Ruby on Rails: Talk" group. > To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to > rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > For more options, visit this group at > http://groups.google.com/group/rubyonrails-talk?hl=en. > >-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
> ^[1-9]\d*$Walter, thanks for this.> Is this column an integer column? If so, then I seem to recall that at > the point that validations run rails has already converted the > argument to an integer, i.e. it will have converted your 123f to 123 > and so your validation passes.Fred, how I can fix it? For example, if user will put in field "12f3" all valid. -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Dheeraj Kumar, it works, thanks! -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.