【发布时间】:2016-10-07 19:10:09
【问题描述】:
来自Multiple Regex @Pattern's for 1 Field?,我了解了如何添加多个模式,但这些模式充当 AND 操作。
有什么方法可以应用 OR 类型吗?
我想检查一个 URL 模式,从这个意义上说有两种可能性: - 基于域 - 基于IP地址
两者相似但不同,所以我想包括两种模式。
【问题讨论】:
标签: java regex url bean-validation
来自Multiple Regex @Pattern's for 1 Field?,我了解了如何添加多个模式,但这些模式充当 AND 操作。
有什么方法可以应用 OR 类型吗?
我想检查一个 URL 模式,从这个意义上说有两种可能性: - 基于域 - 基于IP地址
两者相似但不同,所以我想包括两种模式。
【问题讨论】:
标签: java regex url bean-validation
按照您提供的链接上的示例帖子,您可以利用正则表达式 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;
由于我没有项目,因此无法测试此代码,但我只使用适用于所有正则表达式引擎的交替模式。
【讨论】:
(?=.*([0-9]|[a-z]))
一种解决方案是编写一个组合约束,例如MyURLPattern,它在内部使用“Boolean composition of constraints”的Hibernate 特定功能。在这种情况下,您还需要将 @ConstraintComposition(OR) 注释添加到您的组合约束中。
需要注意的是,此解决方案不能在 Bean 验证提供者之间移植。
【讨论】: