Java正则校验name字段非空仅匹配单字符,多字符场景失效如何解决
问题根因
你的原正则"(?s).*?\"name\":\"\\S\".*?"中,\S仅匹配单个非空白字符,当name字段值长度≥2时,\S匹配第一个字符后,后续的字符无法匹配正则中紧跟的",导致整体匹配失败,错误返回空。
修复方法
适配非空且无空白的name值
如果业务要求name值不能包含任何空白字符,将单次匹配的\S改为匹配1次及以上的\S+即可,修改后正则为:"(?s).*?\"name\":\"\\S+\".*?"
适配允许含空白的非空name值
如果业务允许name值中间带空白(比如"张三 三"这类合法值),仅要求不能是空字符串,可使用更通用的规则,匹配双引号之间至少1个非引号字符:"(?s).*?\"name\":\"[^\"]+\".*?"
验证效果
修改后测试所有场景均符合预期:
- 输入
[{"id": 12,"name":"t","gender":"male"}]:匹配成功,返回非空 - 输入
[{"id": 12,"name":"","gender":"male"}]:匹配失败,返回空 - 输入
[{"id": 12,"name":"to","gender":"male"}]:匹配成功,返回非空 - 输入
[{"id": 12,"name":"test user","gender":"male"}]:[^"]+版本匹配成功,符合需求
内容的提问来源于stack exchange,提问作者RCT
相关产品推荐
相关产品推荐

