没有领先零的朱利安日正则表达式

时间:2017-09-01 17:17:28

标签: javascript regex julian

我真的很难为Julian Day创建一个不允许前导零的Reg Ex。

我使用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的匹配。(此问题正在转换为我的input validation control。)

我考虑过尝试将+用于一个或多个,但我不需要允许前导零,所以这不起作用。

我已经阅读guidance询问RegEx问题,并尝试关注它,但如果我错过了某些内容,请告诉我,我会更新我的问题。

1 个答案:

答案 0 :(得分:3)

主要问题有两个:1)应该对备选方案进行分组,以便^$锚点可以应用于所有这些,2)[1-3][0-5][0-9]部分没有将160199260299相匹配,此部分应分为两个单独的分支[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])$

请参阅regex demo

<强>详情

  • ^ - 字符串开头
  • (?: - 替代方案组:
    • [1-9] - 1到9
    • | - 或
    • [1-9][0-9] - 1099
    • | - 或
    • [12][0-9]{2} - 100299
    • | - 或
    • 3[0-5][0-9] - 300359
    • | - 或
    • 36[0-6] - 360366
  • ) - 交替小组结束
  • $ - 以及字符串的结尾。