正则表达式匹配 1 到 31 之间的数字,带或不带前导 0

Mr.*_*guy 9 html javascript regex angularjs

我想在 an 上设置一些验证<input>以防止用户输入错误的字符。为此,我正在使用ng-pattern. 它目前禁止用户输入错误的字符,但我也注意到这不是预期的行为,所以我也计划创建一个指令。


我在用

AngularJS:1.6.1


正则表达式应该匹配什么

以下是正则表达式字符串的要求:

  • 数字 0x 到 xx(例如 01 到 93)
  • 数字 x 到 xx(例如 9 到 60)
  • 不允许使用字符
  • 不允许有特殊字符

注意:“x”是可变的,可以是 0 到 100 之间的任何数字。

'x' 位置的数字是可变的,因此如果可以创建一个易于更改的字符串,将不胜感激!


我试过的

我在其中尝试了一些正则表达式字符串:

1) ^0*([0-9]\d{1,2})$

--> Does match 01 but not 1
--> Does match 32 where it shouldn't
Run Code Online (Sandbox Code Playgroud)

2) ^[1-9][0-9]?$|^31$

--> Does match 1 but not 01
--> Does match 32 where it shouldn't
Run Code Online (Sandbox Code Playgroud)

为了测试,我使用https://regex101.com/tests

我在尝试中遗漏了什么?

Seb*_*sne 10

如果您的目标是匹配 0 到 100,这里有一种方法,基于之前的解决方案。

\b(0?[1-9]|[1-9][0-9]|100)\b
Run Code Online (Sandbox Code Playgroud)

基本上,那场比赛有3个部分......

0?[1-9] 通过提及可能存在 0 来解决数字 1 到 9

[1-9][0-9] 涵盖数字 10 到 99,[1-9] 代表十位

100 覆盖 100

这是一个例子

如果您需要将较高边界设置为 42,则表达式的中间部分将变为[1-3][0-9](覆盖 10 到 39),最后一部分将变为4[0-2](覆盖 40 到 42),如下所示:

\b(0?[1-9]|[1-3][0-9]|4[0-2])\b
Run Code Online (Sandbox Code Playgroud)