微服务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
相关产品推荐
相关产品推荐

