多个@Pattern表现得像OR操作

时间:2016-06-07 18:37:20

标签: java regex url bean-validation

Multiple Regex @Pattern's for 1 Field?我看到如何添加多个模式,但这些模式充当AND操作。

有没有办法申请OR类型?

我想检查一下网址模式,从这个意义上说,有两种可能性: - 基于域名 - 基于IP地址

两者都相似但不同,所以我想包括两种模式。

2 个答案:

答案 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提供程序之间移植。