【问题标题】:Regex - accept only numbers between 1 and 100 (shouldnot accept anything else)正则表达式 - 只接受 1 到 100 之间的数字(不应接受其他任何数字)
【发布时间】:2013-01-31 09:14:07
【问题描述】:

我有接受 1 到 100 之间数字的正则表达式。但它接受特殊字符 '%'

这是我正在使用的正则表达式

^(0*100{1,1}\\.?((?<=\\.)0*)?%?$)|(^0*\\d{0,2}\\.?((?<=\\.)\\d*)?%?)$'

我不想接受 % 谁能帮我解决这个问题。

【问题讨论】:

  • 前导零怎么样:001
  • 没有前导零。它可以在 1 到 100 之间。用户可以在 1 到 100 之间输入 1 到 3 位数字。

标签: regex


【解决方案1】:

Ali Shah Ahmed 建议的正则表达式不适用于 1 位数字,这个可以:

(100)|(0*\d{1,2})

已编辑:如果您不想接受值 0,则可以使用此正则表达式:

(100)|[1-9]\d?

【讨论】:

  • @user2028437:编辑了我的答案。
  • 这接受 JS 中的 1000(^100$)|^[1-9]\d?$ 是 1-100
  • @vbranden 第二个正则表达式在 javascript 中有效。
  • 它有效,但它允许 1000 超出 OP 要求的范围,即它只能是 1 - 100 regex101.com/r/vS0pY7/1
  • @vbranden 抱歉,但我不明白 - 我在 3 个不同的 javascript 正则表达式测试器中尝试了正则表达式,并且都匹配 100,而不是 1000。最后一个零不匹配。
【解决方案2】:

删除所有%?。这表明正则表达式应该匹配零个或一个% 字符。

【讨论】:

  • 我删除了 %?。刚才我发现我也可以输入'0'。你能告诉我如何不允许 0(零)
  • 我不想接受零。但从 1 到 100。抱歉标题中的错误内容
【解决方案3】:

我会采取多步骤的方法。不会尝试仅使用正则表达式来解决此问题。维护是一场噩梦。

我的解决方案:-

使用简单的正则表达式来确定该值是否为三位或更少位数的整数。

/^\d{1,3}$/

如果有效,则转换为一个数字。

检查号码是&lt;= 100&gt;= 0

【讨论】:

  • 我可以在我的控制器代码中做到这一点。但是jsut想尝试使用正则表达式
【解决方案4】:

我相信这个正则表达式也会起作用,而且比你提到的那个更简单。

(100)|(0*\d{1,2})

这也会处理前导零。

【讨论】:

  • 如果数字只有 1 位,您的正则表达式会失败。正确的正则表达式是:(100)|(0*\d{1,2})
【解决方案5】:

这仅匹配 1 到 100(含):
/\b((100)|[1-9]\d?)\b/

\b 匹配单词边界。这意味着类似于 JavaScript:
/((100)|[1-9]\d?)/.test("I have 1000 dollars");
将返回true。相反,使用单词边界将返回false

【讨论】:

    【解决方案6】:

    这允许从 1 到 100 的数字:

    100|[1-9]?\d
    

    【讨论】:

      【解决方案7】:

      ^(100|[1-9][0-9]?)$ 此正则表达式匹配 1 到 100, 100 正好匹配 100 或 [1-9] 匹配 1 到 9 范围内的字符 [0-9] 匹配 0 到 9 范围内的字符 ?匹配前一个标记的 0 和 1 之间

      并在此处验证正则表达式组合供您参考https://regexr.com/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-27
        • 1970-01-01
        • 1970-01-01
        • 2018-05-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多