小数范围为0.025至99.999的正则表达式

时间:2018-09-25 14:38:06

标签: javascript regex angular

我知道之前曾问过许多类似的问题,但是找不到适合我需求的解决方案。

出于验证目的,我需要使用正则表达式作为模式,该范围介于TelevisionDao0.025之间,但也应匹配整数以及任何可能的十进制形式3位小数:

  

1-匹配

     

1.0-匹配

     

1.000-匹配

     

0.025-匹配

     

0.03-匹配

     

0.01-不匹配

     

0.024-不匹配

到目前为止,我的正则表达式看起来像这样:

99.999

它实际上匹配^(?!0*(\.0+)?$)([1-9]?[0-9]\.[0-9]{0,3}|[1-9]?[0-9])?$ 0.001之间的所有内容,因为管理了如何用小数形式排除0,但不知道如何以最简单的方式将99.999排除到{{1 }}。

2 个答案:

答案 0 :(得分:6)

在javascript中,您只需将字符串转换为数字并使用类似的逻辑

const str = '1.0'
const test = +str;

if(test >= 0.025 && test <= 99.999) {
  console.log('valid');
}

IMO这将更容易阅读

编辑:

如注释中所述,这将传递给3e-2之类的字符串,该字符串在javascript中是定义数字的有效语法,因此您可能必须根据用例处理该情况。

答案 1 :(得分:1)

要定期进行此操作,您需要做一些复杂的事情:

<input type="datetime-local" class="form-control" id="date" value="{{formatted_date}}" name="created">

Here it is in Regex101

这是JS中的工作方式

^(?:0\.02[5-9]|0\.0[3-9]\d?|0\.[1-9]\d{0,2}|[1-9][0-9]?(?:\.\d{1,3})?)$

表达式的解释:它是一堆覆盖值范围的OR。尽管您可以对其进行更多压缩,但我尝试使其保持逻辑性和可读性:

  • const regex = /^(?:0\.02[5-9]|0\.0[3-9]\d?|0\.[1-9]\d{0,2}|[1-9][0-9]?(?:\.\d{1,3})?)$/; const testValues = [ "0", "1", "99.999", "0.025", "0.024", "0.01" ]; testValues.forEach(value => console.log(value, regex.test(value)));-值从0\.02[5-9]0.025
  • 0.029-值从0\.0[3-9]\d?0.03。最后一位数字是可选的。
  • 0.099-值从0\.[1-9]\d{0,2}0.1。后两位是可选的。到目前为止,在每种情况下小数部分都是强制性的,因此0.999无效。
  • 0-值从1到99.999。同样,小数点和小数部分设置为可选。如果存在,则可以有1-3个。
  • 将整个正则表达式包装在一个非捕获组中,然后嵌套在[1-9][0-9]?(?:\.\d{1,3})^锚点之间,以确保ENTIRE字符串匹配。

此正则表达式的重要排除项:

  • 指数形式/科学计数法。例如:$3e1
  • 以零开头的数字。例如:3e-101
  • 以符号开头的数字。例如:02.345
  • 从小数部分开始的值。例如:+100.2
  • 以点结尾的值。例如0.1231.
  • 包含空格的字符串。例如:2.将不匹配。解决此问题的最简单方法是在测试之前确保已对值进行修整。