从Multiple Regex @Pattern's for 1 Field?我看到如何添加多个模式,但这些模式充当AND操作。
有没有办法申请OR类型?
我想检查一下网址模式,从这个意义上说,有两种可能性: - 基于域名 - 基于IP地址
两者都相似但不同,所以我想包括两种模式。
答案 0 :(得分:1)
根据您提供的链接上的示例帖子,您可以利用正则表达式OR
,因此不要像AND
这样使用多个模式:
@Pattern.List({
@Pattern(regexp = "(?=.*[0-9])", message = "Password must contain one digit."),
@Pattern(regexp = "(?=.*[a-z])", message = "Password must contain one lowercase letter.")
})
private String password;
您可以将其更改为使用单个模式,正则表达式替换为OR:
@Pattern(regexp = "(?=.*[0-9])|(?=.*[a-z])", message = "Password is invalid")
private String password;
我无法测试此代码,因为我没有项目,但我只使用适用于所有正则表达式引擎的交替模式。
答案 1 :(得分:0)
一种解决方案是编写一个组合约束,例如 MyURLPattern ,它在内部使用“Boolean composition of constraints”的Hibernate特定功能。在这种情况下,您还需要将@ConstraintComposition(OR)
注释添加到撰写约束中。
需要注意的是,此解决方案无法在Bean Validation提供程序之间移植。