Ответ 1
Самый простой способ для этого состоял в том, чтобы проанализировать строку как число и посмотреть, что номер находится в правильном диапазоне.
Чтобы сделать это с помощью чистого регулярного выражения, вам нужно идентифицировать шаблон и записать его:
^(0?[0-9]{1,2}|1[0-7][0-9]|180)$
У этого есть три альтернативы: один для одно- и двухзначных чисел (допускающих ведущие нули), где каждая цифра может быть чем угодно от 0 до 9. И еще один, который указывает, какой диапазон цифр разрешен для каждой цифры в трехзначное число. В этом случае это означает, что первая цифра должна быть 1, вторая - от 0 до 7, а последняя может быть любой. Третий вариант - это просто номер 180, который не очень хорошо вписывается в шаблон в другом месте.
Более простой подход может быть
^(0{0,2}[0-9]|0?[1-9][0-9]|1[0-7][0-9]|180)$
который просто чередуется для каждого сложного числового диапазона.