无法为JSON值创建正则表达式:json-unit匹配规则求助
解决json-unit验证字母数字或null字段的问题
针对你遇到的场景,直接用正则匹配null行不通,因为json-unit的matches是用来校验字符串值的,而JSON里的null是独立的空值类型,不是字符串"null"。这里给你两种可行的解决方法:
方法1:使用json-unit.or()组合匹配规则
这是最直接的方式,分别匹配字母数字字符串和JSON null:
{"name": "${json-unit.or(json-unit.matches:^[A-Za-z0-9]+$, null)}"}
- 左边的
json-unit.matches:^[A-Za-z0-9]+$负责校验字母数字组合的字符串值 - 右边的
null直接匹配JSON格式的空值 or()表示两种情况满足其一即可
方法2:结合类型判断与正则(可选)
如果需要更严谨的类型校验,也可以先判断字段类型,再对应校验:
{"name": "${json-unit.or(json-unit.when(isString(), matches:^[A-Za-z0-9]+$), isNull())}"}
为什么之前的写法报错?
- 第一种写法里的正则
^([A-Za-z0-9]+|null)$是在匹配字符串"null",但你的数据里是JSON原生的null,不是字符串,所以匹配失败。 - 第二种写法存在语法错误(缺少闭合的
}),同时没区分字符串和null的类型差异,导致校验null时不生效。
内容的提问来源于stack exchange,提问作者osama saleem
相关产品推荐
相关产品推荐

