javascript - 如何匹配两个数字之间的格式
问题描述
我有这个号码
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
所以我想做的是匹配数字格式。
我可以简单地拆分它,但我怎样才能在正则表达式中实现它?
解决方案
我会使用正则表达式来获取数字的每个部分,然后计算它们的长度。我们可以考虑:
- 小数点前多少个字符;
- 如果有小数点;
- 小数点后多少个字符。
以下正则表达式可以解决问题:
/^(\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
根据需要存储它们,但是根据程序其余部分实际发生的情况,可能会有更好的选择——例如,如果你只从用户那里获取这些数字要通过这个函数运行它们,它们实际上不需要是数字等。
推荐阅读
- python - 更改 JSON 密钥以返回 API
- fiware-orion - 使用 orderBy 自定义属性查询 FIWARE Orion 时出错
- php - 自定义字段未将数据插入 vtiger 中的数据库
- java - 如何从 JSON 对象中获取所有键作为 Java 中的字符串数组
- amazon-ecs - 如何访问 AWS ECS 容器?
- yii2 - 将数据直接传递给 yii2-tree-manager
- javascript - 尽管 JavaScript 中的条件为真,但不显示值
- python - 烧瓶内部蓝图找不到模板
- python - 将交叉表另存为 PDF - Python
- bash - Bash 检测 WSL