Okay, but first, the others are correct in having you check for your 'q' quit action first.
The '^' character says start matching from the very first character in the string. This is called an 'anchor', because you're saying the match starts at a specific place.
The '\d' means match only number characters. The translation is '' also seen as '[0-9]'. There are many of these shortcuts and it is worth your while to learn them (see perlre doc).
The '+' means "one or more of the preceding". So we're saying there has to be at least one numeric digit and maybe more (but contiguous - nothing in-between).
And the '$' is like '^', an anchor, saying the match ends after the last character in the string. (There's a footnote about newline chars, but look that up later).
So altogether we're saying that the entire string (because of the '^' and '$' anchors) must contain only numeric characters and there must be at least one of those, and nothing else is allowed.
Other people have mentioned playing with '+' or '-' signs and that's reasonable. It gets into the topic "what do you think a number looks like?" I know there's good discussions in lots of books. I found a bit of one in perlretut under "Building a Regexp". There's probably others in the docs.
With REs it is only a question of "How much fun can you stand at any one time?" Learn just what you need at the time and keep adding on!