正则表达式,匹配一个范围的值用分号隔开,也可以是单独的一个值

匹配1-31的值,可以是1,2,3,4,5 还可以是1 这样的类型 输入的值要在1到31之间;
比如输入:1,2,3,31 返回true 输入1,2,32返回false

输入2返回true 输入32返回false

void Main()
{
    var arry=new string[]{"1,12,3,31",
                        "1",
                        "1,12,32",
                        "2",
                        "33",};
    var reg=new Regex(@"^(([1-9]|[12]\d|3[01]),)*([1-9]|[12]\d|3[01])$");
    foreach(var item in arry)
         Console.WriteLine("{0} -- {1}",item,reg.IsMatch(item));

    /*
    1,12,3,31 -- True
    1 -- True
    1,12,32 -- False
    2 -- True
    33 -- False
    */
}
<script>
var rx = /^([1-9]|[1-2]\d|30|31)(,([1-9]|[1-2]\d|30|31))*$/;

document.write(rx.test("1,2,3,31")  + '<br>');
document.write(rx.test("1,0,3,31")  + '<br>');

document.write(rx.test("1,2,3,33") + '<br>');
document.write(rx.test("1,2,3,23") + '<br>');

(([1-2]\d|30|31|4-9),)*(([1-2]\d|30|31|4-9))

void Main()
{
    var arry=new string[]{"1,2,3,31",
                        "1",
                        "1,12,32",
                        "2",
                        "32",};
    var reg=new Regex(@"^(([1-9]|(2\d)|(3[01])),)*([1-9]|(2\d)|(3[01]))$");
    foreach(var item in arry)
         Console.WriteLine("{0} -- {1}",item,reg.IsMatch(item));

    /*
    1,2,3,31 -- True
    1 -- True
    1,12,32 -- False
    2 -- True
    32 -- False
    */
}

楼上的那些都回答了,基本都是一样的做法,
^(([1-9]|[12]\d|3[01]),)*([1-9]|[12]\d|3[01])$

^([1-9]|[1-2]\d|30|31)(,([1-9]|[1-2]\d|30|31))*$
都可以的