regex 使用正则表达式对特定数字的Javascript小数位数限制

e4eetjau  于 2022-11-18  发布在  Java
关注(0)|答案(3)|浏览(100)

我有一些针对输入类型编号的客户端验证,

  • 将接受0到99之间的任何数字,带2个小数位
  • 小数点的值必须为.00、.25、.33、.5、.67、.75

我已经尝试了2位数长度验证,但我如何才能验证特定的十进制数与regex列表?
/^\d{1,2}(.\d{1,2})?$/

有效案例

5.25
78.5
99.75

无效案例

88.12
50.78

tez616oj

tez616oj1#

您可以将模式编写为:

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

说明

  • ^字符串开头
  • \d{1,2}匹配1位或2位数字
  • \.匹配点
  • (?:替代项的非捕获组
  • 00|[72]5|33|67|50?匹配0075253367550
  • )关闭非捕获组
  • $字符串结束

Regex demo

wa7juj8i

wa7juj8i2#

我将对各种允许的小数结尾使用交替:

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

zte4gxcn3#

我不清楚您是否允许前导零。如果不允许,以下是一个解决方案:

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
  • $--字符串末端的锚

相关问题