首页 > 解决方案 > 如何匹配两个数字之间的格式

问题描述

我有这个号码

const number1 = 123.45
const number2 = 1249.4
const number3 = 111.20
const number4 = 12.10

我想实现这样的目标

number1 == number3 : true
number1 == number2 : false
number1 == number4 : false

所以我想做的是匹配数字格式。

我可以简单地拆分它,但我怎样才能在正则表达式中实现它?

标签: javascriptregex

解决方案


我会使用正则表达式来获取数字的每个部分,然后计算它们的长度。我们可以考虑:

  • 小数点前多少个字符;
  • 如果有小数点;
  • 小数点后多少个字符。

以下正则表达式可以解决问题:

/^(\d)+(\.\d+)?$/

这里的关键部分是将每个部分括在括号中创建“捕获组”,我们可以从中提取匹配的文本,例如小数点前的部分和小数点后的部分。

从这里,我们可以对这两个数字运行 RegEx,然后检查它们对应的捕获组长度:

function numberFormat(a, b) {
    const getParts = /^(\d)+(\.\d+)?$/
    let one = (a + "").match(getParts);
    let two = (b + "").match(getParts);
    return one[1].length == two[1] && one[2].length == two[2].length;
}

值得注意的是,0结果数组中的第 th 项始终是完全匹配的字符串,然后每个附加项对应一个捕获组。


不过,这对于您的确切示例并不适用。Javascript在您创建它们时会丢弃任何多余的数字,因此 eg在其定义时111.20变为,因此111.2我们无法将其0取回。同样,类似的东西7.00就变成了7

解决此问题的最佳方法显然取决于您的用例。一种方法是将数字存储为字符串,然后parseInt根据需要存储它们,但是根据程序其余部分实际发生的情况,可能会有更好的选择——例如,如果你只从用户那里获取这些数字要通过这个函数运行它们,它们实际上不需要是数字等。


推荐阅读