# How do I validate a numeric field?

**URL:** <https://www.ruby-forum.com/t/how-do-i-validate-a-numeric-field/49814>\
**Category:** Rails\
**Created:** [December 8, 2005, 10:23pm UTC](https://www.ruby-forum.com/t/how-do-i-validate-a-numeric-field/49814 "2005-12-08T22:23:08Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![farocco](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/f08c70/32.png) [@farocco](https://www.ruby-forum.com/u/farocco)\
**Post date:** [December 8, 2005, 10:23pm UTC](https://www.ruby-forum.com/t/how-do-i-validate-a-numeric-field/49814/1 "2005-12-08T22:23:08Z")

</div>

Hello,

I have a quanity field in my form that should have a length of no more  
than 3.

I tried validate\_length\_of :qty, :maximum =\> 3

and this fails

Thanks  
Frank

---

<div class="post-metadata">

**Author:** ![farocco](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/f08c70/32.png) [@farocco](https://www.ruby-forum.com/u/farocco)\
**Post date:** [December 8, 2005, 10:31pm UTC](https://www.ruby-forum.com/t/how-do-i-validate-a-numeric-field/49814/2 "2005-12-08T22:31:16Z")

</div>

Frank,

try this:

validate\_format\_of :qty, /[1-9][\d]{0,2}/

That should get you a non-zero digit, followed by up to two more digits.

- Jamie

---

<div class="post-metadata">

**Author:** ![farocco](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/f08c70/32.png) [@farocco](https://www.ruby-forum.com/u/farocco)\
**Post date:** [December 8, 2005, 10:39pm UTC](https://www.ruby-forum.com/t/how-do-i-validate-a-numeric-field/49814/3 "2005-12-08T22:39:43Z")

</div>

I get Application error (Rails)

Frank  
----- Original Message -----  
From: “Jamie M.” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
To: [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
Sent: Thursday, December 08, 2005 4:27 PM  
Subject: Re: [Rails] how do I validate a numeric field?

---

<div class="post-metadata">

**Author:** ![farocco](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/f08c70/32.png) [@farocco](https://www.ruby-forum.com/u/farocco)\
**Post date:** [December 8, 2005, 10:39pm UTC](https://www.ruby-forum.com/t/how-do-i-validate-a-numeric-field/49814/4 "2005-12-08T22:39:45Z")

</div>

Frank wrote:

> I have a quanity field in my form that should have a length of no more than 3.
> 
> I tried validate\_length\_of :qty, :maximum =\> 3
> 
> and this fails

Numbers don’t have a length. Just because a numeric value is 1001  
doesn’t mean the variable has a “length” of 4.

What you probably want to use is:

validates\_inclusion\_of :qty, :in =\> 0…999

-Brian

---

<div class="post-metadata">

**Author:** ![farocco](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/f08c70/32.png) [@farocco](https://www.ruby-forum.com/u/farocco)\
**Post date:** [December 8, 2005, 10:43pm UTC](https://www.ruby-forum.com/t/how-do-i-validate-a-numeric-field/49814/5 "2005-12-08T22:43:48Z")

</div>

I’m guessing, but is “length” meant for strings and it should be  
something like validate\_with\_precision? something like that.

bruce

---

<div class="post-metadata">

**Author:** ![farocco](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/f08c70/32.png) [@farocco](https://www.ruby-forum.com/u/farocco)\
**Post date:** [December 8, 2005, 10:43pm UTC](https://www.ruby-forum.com/t/how-do-i-validate-a-numeric-field/49814/6 "2005-12-08T22:43:49Z")

</div>

Jamie M. wrote:

> try this:
> 
> validate\_format\_of :qty, /[1-9][\d]{0,2}/

Just so we’re clear, the method is correctly named,  
“validates\_format\_of”, not “validate\_format\_of”. At least, that’s what  
my PDF copy of AWDwR says. But I wouldn’t use validates\_format\_of to  
check for a number within a certain range of values. That’s what  
validates\_inclusion\_of is for…

-Brian

---

<div class="post-metadata">

**Author:** ![farocco](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/f08c70/32.png) [@farocco](https://www.ruby-forum.com/u/farocco)\
**Post date:** [December 8, 2005, 10:43pm UTC](https://www.ruby-forum.com/t/how-do-i-validate-a-numeric-field/49814/7 "2005-12-08T22:43:49Z")

</div>

Sorry, validates\_format\_of (with an S). I like Brian’s answer better  
though.

---

<div class="post-metadata">

**Author:** ![farocco](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/f08c70/32.png) [@farocco](https://www.ruby-forum.com/u/farocco)\
**Post date:** [December 8, 2005, 10:47pm UTC](https://www.ruby-forum.com/t/how-do-i-validate-a-numeric-field/49814/8 "2005-12-08T22:47:52Z")

</div>

Thanks,

This worked:

validates\_inclusion\_of :QTY1, :in =\> 0…999, :message =\> “must be  
between 0  
and 999”

Frank

----- Original Message -----  
From: “Brian V. Hughes” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
To: [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
Sent: Thursday, December 08, 2005 4:37 PM  
Subject: Re: [Rails] how do I validate a numeric field?

---

<div class="post-metadata">

**Author:** ![farocco](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/f08c70/32.png) [@farocco](https://www.ruby-forum.com/u/farocco)\
**Post date:** [December 8, 2005, 11:53pm UTC](https://www.ruby-forum.com/t/how-do-i-validate-a-numeric-field/49814/9 "2005-12-08T23:53:02Z")

</div>

Hi Frank,

You could use the \*validates\_numericality\_of(\*args) \*method.

eg  
validates\_numericality\_of :qty, :only\_integer =\> true  
[http://api.rubyonrails.com/classes/ActiveRecord/Validations/ClassMethods.html#M000690](http://api.rubyonrails.com/classes/ActiveRecord/Validations/ClassMethods.html#M000690)

Your model class can then include a validate method. This method is  
called  
before the model is saved, and you should protect it.

ie  
protected  
def validate  
errors.add( :qty, “Should be between 0 and 1000”) unless ( :qty.nil?  
||  
(:qty \>= 0 and :qty \< 1000))  
end

This information came from the Agile web Development with Rails book  
modified for this situation. It is a great book when your starting with  
Rails.

Cheers  
Dan
