Possible Duplicate:
What's a C# regular expression that'll validate currency, float or integer?
How can I validate currency amount using regular expressions in JavaScript?
Decimals separator: ,
Tens, hundreds, etc. separator: .
Pattern: ###.###.###,##
Examples of valid amounts:
1
1234
123456
1.234
123.456
1.234.567
1,23
12345,67
1234567,89
1.234,56
123.456,78
1.234.567,89
EDIT
I forgot to mention that the following pattern is also valid: ###,###,###.##
Based solely on the criteria you gave, this is what I came up with.
/(?:^\d{1,3}(?:\.?\d{3})*(?:,\d{2})?$)|(?:^\d{1,3}(?:,?\d{3})*(?:\.\d{2})?$)/Demo
It is ugly, and it will only get worse as you find more cases that need to be matched. You’d be well served to find and use some validation library rather than try to do this all yourself, especially not in a single regular expression.
Updated to reflect added requirements.
Updated again in regard to comment below.
It would match
123.123,123(three trailing digits instead of two) because it would accept either comma or period as both the thousands and decimal separators. To fix that, I’ve now essentially doubled up the expression; either it matches the whole thing with commas for separators and a period as the radix point, or it matches the whole thing with periods for separators and a comma as the radix point.See what I mean about it getting messier? (^_^)
Here’s the verbose explanation:
One thing that makes it look more complicated is all the
?:in there. Normally a regular expression captures (returns matches for) all of the subpatterns too. All?:does is say to not bother to capture the subpattern. So technically, the full thing would still match your entire string if you took all of the?:out, which looks a bit clearer:/(^\d{1,3}(\.?\d{3})*(,\d{2})?$)|(^\d{1,3}(,?\d{3})*(\.\d{2})?$)/Also, regular-expressions.info is a great resource.