【问题标题】:Regex match number between 1 and 31 with or without leading 01 到 31 之间的正则表达式匹配数,带或不带前导 0
【发布时间】:2017-05-28 21:13:49
【问题描述】:

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

我在尝试中遗漏了什么?

【问题讨论】:

    标签: javascript html angularjs regex


    【解决方案1】:

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

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

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

    0?[1-9] 地址数字 1 到 9,提及可能存在 0

    [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
    

    【讨论】:

      【解决方案2】:

      这应该可行:

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

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

      【讨论】:

      • 谢谢!但是由于'from'和'to'是可变的,假设我想达到最大32,那么字符串应该如何改变? '^0?[1-9]|[12][0-9]|3[02]$' 不起作用。此外,字符串 '02Test' 也匹配它不应该匹配的位置。
      • 要接受 32、33 等,请将最后一个 [01] 更改为一个范围:[0-2][0-3]
      • 感谢您的更新。现在它也匹配 32、33 等等。但是还有一个问题。我更新了正则表达式的要求。你的解决方案适用吗?
      • @Mr.wiseguy:这是一个完全不同的问题。是的,理论上可以创建一个正则表达式来匹配一个数字范围,但这没有什么意义——数字验证更简单,更不容易出错。考虑ng-minng-max 和朋友。
      • 我不明白你所做的编辑或 0x-xx 和 x-xx 的含义。
      猜你喜欢
      • 1970-01-01
      • 2015-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多