Kama
Kama

Reputation: 193

Regex for integer, integer + dot, and decimals

I have searched StackOverflow and I can't find an answer as to how to check for regex of numeric inputs for a calculator app that will check for the following format with every keyup (jquery key up):

I don't plan to use commas to separate the thousands...but I would welcome if anyone can also provide a regex for that.

Is it possible to check the above conditions with just one regex? Thanks in advance.

Upvotes: 0

Views: 2416

Answers (5)

Kevin S. Miller
Kevin S. Miller

Reputation: 962

I'm using ^(\d)+(.(\d)+)+$ to capture each integer and to have an unlimited length, so long as the string begins and ends with integers and has dots between each integer group. I'm capturing the integer groups so that I can compare them.

Upvotes: 0

Joe
Joe

Reputation: 15802

I'm going to throw in a potentially downvoted answer here - this is a better solution:

function valid_float (num) {
    var num = (num + '').replace(/,/g, ''), // don't care about commas, this turns `num` into a String
        float_num = parseFloat(num);
    return float_num == num || float_num + '.' == num; // allow for the decimal point, deliberately using == to ignore type as `num` is a String now
}

Any regex that does your job correctly will come with a big asterisk after it saying "probably", and if it's not spot on, it'll be an absolute pig to debug.

Sure, this answer isn't giving you the most awesomely cool one-liner that's going to make you go "Cool!", but in 6 months time when you realise it's going wrong somewhere, or you want to change it to do something slightly different, it's going to be a hell of a lot easier to see where, and to fix.

Upvotes: 0

John Kugelman
John Kugelman

Reputation: 361585

Is a lone . a successful match or not? If it is then use:

\d+(\.\d*)?|\.\d*

If not then use:

\d+(\.\d*)?|\.\d+

Rather than incorporating commas into the regexes, I recommend stripping them out first: str = str.replace(/,/g, ''). Then check against the regex.

That wouldn't verify that digits are properly grouped into groups of three, but I don't see much value in such a check. If a user types 1,024 and then decides to add a digit (1,0246), you probably shouldn't force them to move the comma.

Upvotes: 3

Shivam Chopra
Shivam Chopra

Reputation: 79

you can use in this way:
[/\d+./] I think this can be used for any of your queries. Whether it's 12445 or 1244. or 12445.43

Upvotes: 0

Zirak
Zirak

Reputation: 39808

Let's write our your specifications, and develop from that.

  • Any integer: \d+
  • A comma, optionally followed by an integer: \.\d*

Combine the two and make the latter optional, and you get:

\d+\.?\d*

As for handling commas, I'd rather not go into it, as it gets very ugly very fast. You should simply strip all commas from input if you still care about them.

Upvotes: 1

Related Questions