Вы можете описать регуляркой число от 1-16 так:
(1[0-6])|([1-9])
Но регекспы не предназначены для условной фильтрации по выражениям.
Обычно они определяют только синтаксис и разделяют текст на группы, которые потом нужно преобразовывать к типам и проверять.
Если приспичило всё-таки, используйте мой вариант описания числа 1-16, но завтра вам потребуется определять четность, а послезавтра потребуется, чтобы правая граница интервала была вдвое больше левой... Надо где-то остановиться и где именно -- решать вам.
Вот в применении к вашему случаю:
^((1[0-6]|[1-9])(-(1[0-6]|[1-9]))?)(,((1[0-6]|[1-9])(-(1[0-6]|[1-9]))?))*$
Можете даже
потестировать