Krishanu Dey
Krishanu Dey

Reputation: 6406

regex for integer or floating point number with two decimals

I want to validate my currency field with regex. I want to allow the following pattern entries

1.23
1
.45
0.56
56.00

No comma should be allowed. I've tried \d+(\.\d\d) but it allows only first, fourth and fifth entries. \d+(?:\.\d\d+)? allows all but third one.

Upvotes: 5

Views: 17432

Answers (2)

Bergi
Bergi

Reputation: 664548

Regexes for floating-point numbers are a solved problem:

\d*\.?\d+

For at least two decimals:

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

To make it more comprehensible:

\d+|\d*\.\d{2,}

And for exactly two decimals:

\d+|\d*\.\d{2}

Depending on your language, don't forget to anchor the expression so that it must match the whole string.

Upvotes: 2

Explosion Pills
Explosion Pills

Reputation: 191749

Use \d* instead of \d+ before the decimal to match zero or more digits. Also add anchors (^ and $) or else it will pass as long as there is any match available. This would also validate an empty string, so if necessary you can use a lookahead to make sure there is at least one digit:

^(?=.*\d)\d*(?:\.\d\d)?$

Upvotes: 9

Related Questions