You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则验证小数位数?Karate脚本验薪资小数点后两位遇错

问题描述

给定JSON响应数据:

[
    {
        "id": 1,
        "name": "Jack",
        "salary": 23.03
    },
    {
        "id": 2,
        "name": "Luke",
        "salary": 0.00
    }
]

需要验证salary字段小数点后仅有两位数字,当前使用的Karate脚本如下:

* def salary = $response..salary
* karate.appendTo(salary)
* def strs = karate.map(salary, function(x){ return x + '' })
* match each strs == '#regex [0-9].+\.[0-9]{2}'

当薪资为23.40或12.30这类带两位小数的值时验证通过,但遇到0、2、3这类整数形式的薪资值时验证失败。


解决方案

原脚本的问题有两个:

  1. 整数类型的薪资转成字符串后没有小数点(比如0会变成"0"),无法匹配原正则里强制要求的小数点\.
  2. 原正则[0-9].+\.[0-9]{2}的[0-9].+部分要求小数点前至少有两位数字,会匹配不到0.00这种小数点前仅一位的情况

下面提供两种可行的修正方案:

方案1:统一格式化后验证(推荐)

先把所有薪资数值格式化为固定两位小数的字符串,再用严格正则验证:

* def salary = $response..salary
* def formattedSalaries = karate.map(salary, function(x){ return x.toFixed(2) })
* match each formattedSalaries == '#regex ^\\d+\\.\\d{2}$'
  • toFixed(2)会自动把任何数值转成带两位小数的字符串:比如0变成"0.00",2变成"2.00",23.03保持"23.03"
  • 正则^\d+\.\d{2}$严格匹配「1个或多个数字 + 小数点 + 两位数字」的格式,完全符合需求

方案2:修改正则兼容两种格式

如果不需要强制显式的两位小数格式,允许薪资以整数形式返回(但逻辑上等价于两位小数),可以用更灵活的正则:

* def salary = $response..salary
* def strs = karate.map(salary, function(x){ return x + '' })
* match each strs == '#regex ^\\d+(\\.\\d{2})?$'

这个正则的含义:

  • ^\d+:开头是1个或多个数字
  • (\.\d{2})?$:结尾可选的「小数点+两位数字」部分
  • 既能匹配"0"、"2"这类整数,也能匹配"23.03"、"0.00"这类标准两位小数

内容的提问来源于stack exchange,提问作者アレックス

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 14:38:30