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

微服务JSON参数验证:仅允许字符串类型1或2的正则表达式求解

解决Hibernate Validator校验idPaidPlatformCustomer只能为"1"或"2"的正则问题

你当前用的[12]正则存在漏洞——它只会检查字符串里包含1或2,像"12"、"31"这类不符合要求的输入也能通过校验。要确保整个字符串只能是"1"或"2",必须用锚点限定字符串的完整范围。

正确的正则表达式

以下两种写法二选一即可,效果完全一致:

  • ^[12]$:匹配单个字符为1或2的完整字符串
  • ^(1|2)$:用分组逻辑明确表达“要么是1,要么是2”

修改后的实体类代码

可以给idPaidPlatformCustomer字段补充@Size(min=1, max=1)进一步限制长度,让校验逻辑更严谨直观:

@NotNull
@Size(min=1, max=1)
@NotEmpty
@Pattern(regexp = "^[12]$")
@JsonProperty("idPaidPlatformCustomer")
@Schema(description = "Id asociado a la plataforma (1=预付费, 2=后付费)")
private String idPaidPlatformCustomer;

原正则失效原因

[12]属于字符类匹配规则,只要字符串中存在1或2就会判定匹配成功,不会约束整个字符串的内容。加上^(字符串起始锚点)和$(字符串结束锚点)后,就强制要求整个字符串必须完全匹配指定字符,就能精准拦截"3"、"12"这类无效值了。

内容的提问来源于stack exchange,提问作者Cesar Justo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:40:41