# Regular Expressions

**URL:** <https://www.ruby-forum.com/t/regular-expressions/114939>\
**Category:** Rails\
**Created:** [September 19, 2007, 12:39am UTC](https://www.ruby-forum.com/t/regular-expressions/114939 "2007-09-19T00:39:10Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Acroterra](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/8e7dd6/32.png) [@Acroterra](https://www.ruby-forum.com/u/Acroterra)\
**Post date:** [September 19, 2007, 12:39am UTC](https://www.ruby-forum.com/t/regular-expressions/114939/1 "2007-09-19T00:39:10Z")

</div>

I am having a really simple problem with regular expressions and  
Rails. I need to validate that input is a number or only digits. I  
using this:

validates\_format\_of :po\_box,  
:with =\> /\d\*/,  
:message =\> “PO Box must be a number  
only. Remove all text.”

however, rails is letting anything be entered. i am getting other  
regular expressions like /a/ to work but for some reason not \d\* or \d  
or [0-9]\* or [0-9].

Can anyone help?  
thanks,  
Wes

---

<div class="post-metadata">

**Author:** ![Acroterra](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/8e7dd6/32.png) [@Acroterra](https://www.ruby-forum.com/u/Acroterra)\
**Post date:** [September 19, 2007, 12:58am UTC](https://www.ruby-forum.com/t/regular-expressions/114939/2 "2007-09-19T00:58:11Z")

</div>

Okay I found a validation method that works for this:  
validates\_numericality\_of …to answer my own question. However, i  
still don’t understand why my approach above still doesn’t work???

Wes

---

<div class="post-metadata">

**Author:** ![Acroterra](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/8e7dd6/32.png) [@Acroterra](https://www.ruby-forum.com/u/Acroterra)\
**Post date:** [September 19, 2007, 1:08am UTC](https://www.ruby-forum.com/t/regular-expressions/114939/3 "2007-09-19T01:08:12Z")

</div>

/^[±]?\d+$/ is the expression to check if the format is an  
integer…

Wes

---

<div class="post-metadata">

**Author:** ![Acroterra](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/8e7dd6/32.png) [@Acroterra](https://www.ruby-forum.com/u/Acroterra)\
**Post date:** [September 19, 2007, 1:11am UTC](https://www.ruby-forum.com/t/regular-expressions/114939/4 "2007-09-19T01:11:13Z")

</div>

You already answered your question, but for the record, /\d\*/ matches  
zero or more occurrences of numeric digits, so entering anything  
meets the zero criterion. You can use \d+ which requires at least one  
digit, but more likely, you want /^\d+$/ which requires everything to  
be digits and requires an entry.

HTH

---

<div class="post-metadata">

**Author:** ![Acroterra](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/8e7dd6/32.png) [@Acroterra](https://www.ruby-forum.com/u/Acroterra)\
**Post date:** [September 19, 2007, 3:16am UTC](https://www.ruby-forum.com/t/regular-expressions/114939/5 "2007-09-19T03:16:22Z")

</div>

/^[0-9]+$/ would work as well.

-john

---

<div class="post-metadata">

**Author:** ![Acroterra](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/8e7dd6/32.png) [@Acroterra](https://www.ruby-forum.com/u/Acroterra)\
**Post date:** [September 19, 2007, 1:02pm UTC](https://www.ruby-forum.com/t/regular-expressions/114939/6 "2007-09-19T13:02:35Z")

</div>

No problem, we’ve said the same thing. 🙂

–j

---

<div class="post-metadata">

**Author:** ![Acroterra](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/8e7dd6/32.png) [@Acroterra](https://www.ruby-forum.com/u/Acroterra)\
**Post date:** [September 19, 2007, 12:47pm UTC](https://www.ruby-forum.com/t/regular-expressions/114939/7 "2007-09-19T12:47:34Z")

</div>

John Adams wrote:

> /^[0-9]+$/ would work as well.
> 
> -john

in Regex the

^ Matches the starting position within the string.  
$ Matches the ending position of the string or the position just  
before a string-terminating newline.

so /^ABC$/ matches ONLY the string ABC. and therefore  
/^\d+$/ requires everything to be digits just like steve said
