Reputation: 6406
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
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
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