我真的很难为Julian Day创建一个不允许前导零的Reg Ex。
我使用JavaScript Reg Ex将其用于输入验证。它需要匹配1到366。
示例匹配:
示例匹配失败:
我在regex101上试过这个:
^ [1-9] | [1-9] [0-9] | [1-3] [0-5] [0-9] | 36 [0-6] $
但是因为我没有正确选择可选部件。因此,当我输入266时,我得到了2和66的匹配。(此问题正在转换为我的input validation control。)
我考虑过尝试将+
用于一个或多个,但我不需要允许前导零,所以这不起作用。
我已经阅读guidance询问RegEx问题,并尝试关注它,但如果我错过了某些内容,请告诉我,我会更新我的问题。
答案 0 :(得分:3)
主要问题有两个: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])$
请参阅regex demo。
<强>详情
^
- 字符串开头(?:
- 替代方案组:
[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
)
- 交替小组结束$
- 以及字符串的结尾。