Reputation: 671
Currently i am using this regex to match for positive numbers with a single decimal point
/^\d+(\.\d+)?$/
But this doesn't allow commas. How can i modify this to allow zero or more commas before the decimal point?
Example :
EDIT:
Valid values
The values can be entered with or without comma. The datatype of this field is SQL MONEY, so it will handle comma's.
Upvotes: 9
Views: 10356
Reputation: 29471
I would use this
^(?:\d{1,3}(,\d{3})*|\d+|\d{2}(?:,\d{2})*,\d{3})(?:\.\d+)?$
Upvotes: 1
Reputation: 7546
This is a very simple general solution, without any assumptions about how many digits are needed.
/^\d[\d,]*(\.\d+)?$/
[\d,]
will match digits or commas.
You could make the regex more complicated if you really need it to be more specific.
Upvotes: 3
Reputation: 10849
This is pretty hard to read but I'll explain it
/^(?:\d+)(?:(?:\d+)|(?:(?:,\d+)?))+(?:\.\d+)?$/
All the ?:
are just to explicitly say to the regex engine "Don't capture the following group matched by this paren).
The simplified version would be
/^(\d+)((\d+)|((,\d+)?))+(\.\d+)?$/
But it'd capture a lot of matching groups for no reason so I removed them
Upvotes: 0
Reputation: 627507
need
/^(?:\d{1,3}(?:,\d{3})*|\d+)(?:\.\d+)?$/
See the regex demo
Details
^
- start of string(?:\d{1,3}(?:,\d{3})*|\d+)
- Either of:
\d{1,3}(?:,\d{3})*
- 1 to 3 digits followed with 0+ sequences of a ,
and 3 digits|
- or\d+
- 1 or more digits(?:\.\d+)?
- an optional sequence of .
and 1+ digits$
- end of string.var strs = [',,,,', '111', '11,111', '11,111.0', '111111'];
var re = /^(?:\d{1,3}(?:,\d{3})*|\d+)(?:\.\d+)?$/;
for (var s of strs) {
console.log(s + " => " + re.test(s));
}
Upvotes: 4