正则表达式匹配编号1到31之间带或不带前导0

时间:2017-01-13 13:22:08

标签: javascript html angularjs regex

我想在<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

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

--> Does match 1 but not 01
--> Does match 32 where it shouldn't

我正在使用https://regex101.com/tests进行测试。

我的尝试中缺少什么?

2 个答案:

答案 0 :(得分:3)

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

\b(0?[1-9]|[1-9][0-9]|100)\b

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

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

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

100涵盖100

Here's an example of it

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

\b(0?[1-9]|[1-3][0-9]|4[0-2])\b

答案 1 :(得分:1)

这应该有效:

^(0?[1-9]|[12][0-9]|3[01])$

https://regex101.com/r/BYSDwz/1