Юлианский день регулярных выражений без ведущих нулей

Я действительно изо всех сил пытаюсь создать Reg Ex для Julian Day, который не допускает ведущих нулей.

Я использую его для проверки ввода с помощью JavaScript Reg Ex. Это должно соответствовать от 1 до 366.

Пример совпадений:

  • 1
  • 99
  • 366
  • 159

Пример совпадения ошибок:

  • 01
  • 001
  • 099
  • 367
  • 999
  • 0

Я попробовал это на regex101:

^ [1-9] | [1-9] [0-9] | [1-3] [0-5] [0-9] | 36 [0-6] $

Но поскольку я не получаю правильные части вниз правильно. Поэтому, когда я ввожу 266, я получаю совпадение со 2 и 66. (Эта проблема переводится в мой элемент управления проверкой ввода).

Я думал о попытке использовать + для одного или нескольких, но мне нужно не допускать начальных нулей, чтобы не работал.

Я прочитал руководство о том, как задать вопрос RegEx, и постарался следовать ему, но если я что-то пропустил, пожалуйста, сообщите мне, и я обновлю свой вопрос

1 ответ

Решение

Основными вопросами являются два: 1) альтернативы должны быть сгруппированы так, чтобы ^ а также $ якоря могут быть применены ко всем из них, 2) [1-3][0-5][0-9] часть не соответствует 160 в 199 а также 260 в 299эта часть должна была быть разбита на две отдельные ветви, [12][0-9]{2}|3[0-5][0-9],

Вы можете использовать

^(?:[1-9]|[1-9][0-9]|[12][0-9]{2}|3[0-5][0-9]|36[0-6])$

Смотрите демо-версию регулярного выражения.

подробности

  • ^ - начало строки
  • (?: - группа альтернатив:
    • [1-9] - с 1 по 9
    • | - или же
    • [1-9][0-9] - 10 в 99
    • | - или же
    • [12][0-9]{2} - 100 в 299
    • | - или же
    • 3[0-5][0-9] - 300 в 359
    • | - или же
    • 36[0-6] - 360 в 366
  • ) - конец группы чередования
  • $ - и конец строки.
Другие вопросы по тегам