Вы можете использовать квантификатор диапазона {min,max}, чтобы указать минимум 1 цифру и максимум 6 цифр как:
^[0-9]{1,6}$
Пояснение:
^ : Start anchor
[0-9] : Character class to match one of the 10 digits
{1,6} : Range quantifier. Minimum 1 repetition and maximum 6.
$ : End anchor
Почему ваше регулярное выражение не работает?
Вы были почти близки к регулярному выражению:
^[0-9][0-9]\?[0-9]\?[0-9]\?[0-9]\?[0-9]\?$
Поскольку вы избежали ?, предшествуя ему с помощью \, ? больше не выступал в качестве метасимвола регулярного выражения (для повторений 0 или 1), но обрабатывался буквально.