多个 @Pattern 的行为类似于 OR 操作
Posted
技术标签:
【中文标题】多个 @Pattern 的行为类似于 OR 操作【英文标题】:Multiple @Pattern behaving like OR operation 【发布时间】:2016-10-07 19:10:09 【问题描述】:来自Multiple Regex @Pattern's for 1 Field?,我了解了如何添加多个模式,但这些模式充当 AND 操作。
有什么方法可以应用 OR 类型吗?
我想检查一个 URL 模式,从这个意义上说有两种可能性: - 基于域 - 基于IP地址
两者相似但不同,所以我想包括两种模式。
【问题讨论】:
【参考方案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;
由于我没有项目,因此无法测试此代码,但我只使用适用于所有正则表达式引擎的交替模式。
【讨论】:
我也考虑过你的方法,但由于正则表达式很长,我正在寻找更“干净”的东西。无论如何,谢谢。 @jlanza 好吧,这是一个与如何缩短正则表达式有关的不同问题。如果此问题中发布的答案解决了您的问题,那么您应该将您的问题标记为已解决并打开一个新问题。与缩短您的正则表达式有关,那么您可以使用这个(?=.*([0-9]|[a-z]))
感谢您的回复。该问题通常与正则表达式 OR 相关,并且您回答正确。我的评论只是说这已经在我的计划中,但我正在寻找一个 Pattern.List 但其中包含 OR,因此我可以获得不同的消息等。【参考方案2】:
一种解决方案是编写一个组合约束,例如MyURLPattern,它在内部使用“Boolean composition of constraints”的Hibernate 特定功能。在这种情况下,您还需要将 @ConstraintComposition(OR)
注释添加到您的组合约束中。
需要注意的是,此解决方案不能在 Bean 验证提供者之间移植。
【讨论】:
以上是关于多个 @Pattern 的行为类似于 OR 操作的主要内容,如果未能解决你的问题,请参考以下文章
我想在 iPad 应用程序中创建一个行为类似于操作表的自定义视图
RxJs操作符,其行为类似于withLatestFrom,但会等待第二个流的值。
如何创建一个行为类似于 UIKeyboard(数字键盘)的 UIButton 矩阵?