Вы хотите сопоставить целое число в определенном диапазоне цифр. Вы хотите, чтобы регулярное выражение точно указывало диапазон, а не просто ограничивало количество цифр.
Решение
От 1 до 12 (час или месяц):
1 | ^(1[0-2]|[1-9])$ |
От 1 до 24 (час):
1 | ^(2[0-4]|1[0-9]|[1-9])$ |
От 1 до 31 (день месяца):
1 | ^(3[01]|[12][0-9]|[1-9])$ |
От 1 до 53 (неделя года):
1 | ^(5[0-3]|[1-4][0-9]|[1-9])$ |
От 0 до 59 (минута или секунда):
1 | ^[1-5]?[0-9]$ |
От 0 до 100 (в процентах):
1 | ^(100|[1-9]?[0-9])$ |
От 1 до 100:
1 | ^(100|[1-9][0-9]?)$ |
От 32 до 126 (печатные коды ASCII):
1 | ^(12[0-6]|1[01][0-9]|[4-9][0-9]|3[2-9])$ |
От 0 до 127 (неотрицательный знаковый байт):
1 | ^(12[0-7]|1[01][0-9]|[1-9]?[0-9])$ |
От -128 до 127 (подписанный байт):
1 | ^(12[0-7]|1[01][0-9]|[1-9]?[0-9]|-(12[0-8]|1[01][0-9]|[1-9]?[0-9]))$ |
От 0 до 255 (беззнаковый байт):
1 | ^(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])$ |
От 1 до 366 (день года):
1 | ^(36[0-6]|3[0-5][0-9]|[12][0-9]{2}|[1-9][0-9]?) |
1900 - 2099 (год):
1 | ^(19|20)[0-9]{2}$ |
От 0 до 32767 (неотрицательное знаковое слово):
1 | ^(3276[0-7]|327[0-5][0-9]|32[0-6][0-9]{2}|3[01][0-9]{3}|[12][0-9]{4}|[1-9][0-9]{1,3}|[0-9])$ |
От -32768 до 32767 (знаковое слово):
1 | ^(3276[0-7]|327[0-5][0-9]|32[0-6][0-9]{2}|3[01][0-9]{3}|[12][0-9]{4}|[1-9][0-9]{1,3}|[0-9]|-(3276[0-8]|327[0-5][0-9]|32[0-6][0-9]{2}|3[01][0-9]{3}|[12][0-9]{4}|[1-9][0-9]{1,3}|[0-9]))$ |
От 0 до 65535 (беззнаковое слово):
1 | ^(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9])$ |