Need a regular expression to validate number with comma separator. 1,5,10,55 is valid but 1,,,,10 is not valid.
+5
A:
This should do it:
^\d+(,\d+)*$
The regex is rather simple: \d+
is the first number, followed by optional commas and more numbers.
You may want to throw in \s*
where you see fit, or remove all spaces before validation.
- To allow negative numbers replace
\d+
with[+-]?\d+
- To allow fractions: replace
\d+
with[+-]?\d+(?:\.\d+)?
Kobi
2010-08-11 07:00:21
+2
A:
Here are the components of the regex we're going to use:
\d
is the shorthand for the digit character class+
is one-or-more repetition specifier*
is zero-or-more repetition specifier(...)
performs grouping^
and$
are the beginning and end of the line anchors respectively
We can now compose the regex we need:
^\d+(,\d+)*$
That is:
from beginning...
| ...to the end
| |
^\d+(,\d+)*$ i.e. ^num(,num)*$
\_/ \_/
num num
Note that the *
means that having just one number is allowed. If you insist on at least two numbers, then use +
instead. You can also replace \d+
with another pattern for the number to allow e.g. sign and/or fractional part.
References
Advanced topics: optimization
Optionally you can make the brackets non-capturing for performance:
^\d+(?:,\d+)*$
And if the flavor supports it, you can make all repetition possessive in this case:
^\d++(?:,\d++)*+$
References
polygenelubricants
2010-08-11 07:05:14
Well, `{1}` is redundant, and so is the capturing group. This is the same as `\d*,\d*` - it must have a single comma, with optional digits around it; not quite the request here. It accepts `,`, `12,34`, `,34`, and rejects `1`, `1,2,3`.
Kobi
2010-08-11 07:08:00