I want to write a regex that match a list of numeric values, given in a comma-separated list, ranges allowed. Empty is not allowed.
Something like: 1-10,20-56,8,7
So far I have (([0-9]+)|([0-9]+-[0-9]+),)*[0-9]+. This does most of the job, except it misses the case of one range only (eg: 1-10 would not validate).
The checking for each range can be omitted (eg: 20-10 can be allowed as a valid range).
Any help would be appreciated.
Lets say that CORE of your patter is
It matches a single numeric value or a range. So, what you need is:
And what you have is:
Do like this and you will be fine:
I think what you were looking for is:
This will allow lists that are:
CORE CORE, CORE CORE, CORE CORE, CORE, CORE
and so on.
Hope this helps,
David
You can use the regex;
Regex in action
What you're after is one (number or range) optionally followed by zero or more: comma plus (number or range):
This uses the
\d
shortcut for [0-9] and the(?: ... )
non-capturing parentheses construct.This regex doesn't allow any spaces to be included in the list. To allow those, insert the "optional space"
\s*
between each term: