【问题标题】:Javascript Decimal Place Restriction To Specific Number With Regex使用正则表达式对特定数字的Javascript小数位限制
【发布时间】:2022-11-12 08:26:51
【问题描述】:

我对输入类型号进行了一些客户端验证

  • 将接受 0 到 99 之间的任何数字,小数点后两位
  • 小数点的值必须是 .00, .25, .33, .5, .67, .75

我尝试过 2 位数长度验证,但如何使用正则表达式验证特定的十进制数字列表?

/^\d{1,2}(\.\d{1,2})?$/

有效案例

5.25

78.5

99.75

无效个案

88.12

50.78

【问题讨论】:

  • 这是一个相当短的有效小数列表,因此请使用布尔交替:\.(?:00|25|33|5|67|75)^\d{1,2} 也允许 0006 这样的东西,所以我不确定这是否是有意的。

标签: javascript regex numbers decimal yup


【解决方案1】:

您可以将模式编写为:

^d{1,2}.(?:00|[72]5|33|67|50?)$

解释

  • ^ 字符串开始
  • d{1,2} 匹配 1 位或 2 位数字
  • . 匹配一个点
  • (?: 替代方案的非捕获组
    • 00|[72]5|33|67|50? 匹配 00 75 25 33 67 550
  • )关闭非捕获组
  • $字符串结尾

Regex demo

【讨论】:

  • @MonkeyZeus 是的,但也应该有 550 所以我必须用 5 进行交易所以它会像这样 ^d{1,2}.(?:[05]0|[72]5|33|67|5)$
【解决方案2】:

我会为各种允许的小数结尾使用交替:

^d{1,2}.(?:00|25|33|5|67|75)$

【讨论】:

    【解决方案3】:

    我不清楚你是否允许前导零。如果没有,这是一个解决方案:

    const regex = /^(?:d|[1-9]d).(?:00|25|33|5|67|75)$/;
    [
      '0.33',
      '5.25',
      '78.5',
      '99.75',
      '09.75',
      '88.12',
      '50.78'
    ].forEach(str => {
      console.log(str + ' => ' + regex.test(str));
    });

    输出:

    0.33 => true
    5.25 => true
    78.5 => true
    99.75 => true
    09.75 => false
    88.12 => false
    50.78 => false
    

    正则解释:

    • ^ -- 锚点在字符串的开头
    • (?:d|[1-9]d) -- 一位数或两位数 10...99
    • . -- 文字点
    • (?:00|25|33|5|67|75) -- 本地 or 允许的小数
    • $ -- 锚点在字符串的末尾

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-15
      • 2016-05-16
      • 2018-07-14
      相关资源
      最近更新 更多