Regex to match either range or list of numbers

regex

Solution

Try this:

^((\d+-(\*|\d+))|((\*|\d+)-\d+)|((\d)(,\d)+))$

Test results:

1-10         OK
1,2,3        OK
1-*          OK
*-10         OK
1,2,3 1-10   NOK
1,2,3 2,3,4  NOK
*-*          NOK

Visualization of the regex:

Edit: Added for wildcard `*` as per OP's comment.

Problem

I need a regex to match lists of numbers and another one to match ranges of numbers (expressions shall never fail in both cases). Ranges shall consist of a number, a dash, and another number (N-N), while lists shall consist of numbers separated by a comma (N,N,N). Here below are some examples. Ranges: ``` '1-10' => OK Whateverelse => NOK (e.g. '1-10 11-20') ``` List: ``` '1,2,3' => OK Whateverelse => NOK ``` And here are my two regular expressions: - [0-9]+[\-][0-9]+ - ([0-9]+,?)+ ... but I have a few problems with them... for example: When evaluating `'1-10'`, regex 2 matches `1`... but it shouldn't match anything because the string does not contain a list. Then, when evaluating `'1-10 11-14'`, regex 1 matches `1-10`... but it shouldn't match anything because the string contains more than just a range. What am I missing? Thanks.

Original source