【问题标题】:Regular expression for percentages greater than 0 and less than or equal to 100大于 0 且小于或等于 100 的百分比的正则表达式
【发布时间】:2016-02-01 11:27:50
【问题描述】:

我在网上搜索并想出了: /(^100(\.0{1,2})?$)|(^([1-9]([0-9])?|0)(\.[0-9]{1,2})?$)/

问题是它接受 0。

【问题讨论】:

  • 这就是它的作用 - |0 - 和 (\.[0-9]{1,2})? 是可选的。
  • 我认为 |0 对 0.3 很重要,例如
  • 然后,您需要为0.01 创建一个单独的分支。试试^(?:100(?:\.0{1,2})?|[1-9]\d?(?:\.\d{1,2})?|0\.(?!0+$)\d{1,2})$。我认为你真的可以将字符串转换为数字,然后使用常规的比较方法。
  • 您为这项工作使用了错误的工具。考虑使用正则表达式捕获值,但在 javascript 中检查边界。即使您能够使用正则表达式来实现这一特技,代码也会非常晦涩难懂且难以维护。

标签: javascript angularjs regex


【解决方案1】:

也许你对问题的思考是错误的。如果可能的话,更好的方法是将字符串转换为双精度并使用arithmetic operators 执行检查。

const examplePercentage = '0.5%';
const percentageAsFloat = parseFloat(examplePercentage); // 0.5
const isValid = percentageAsFloat > 0 && percentageAsFloat <= 100; // true

【讨论】:

    【解决方案2】:

    试试这个:

    ^0*(100(\.0{1,2})?|[1-9][0-9]?(\.[0-9]{1,2})?|0\.(0[1-9]|[1-9][0-9]?))$
    

    它处理 &gt;= 1&lt; 1 不同。

    但是我会去解析数字并检查它的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-08
      • 2019-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-25
      相关资源
      最近更新 更多