从Multiple Regex @Pattern's for 1 Field?我看到如何添加多个模式,但是这些模式充当AND操作。多个@Pattern的行为与OR操作相同
有什么方法可以应用OR类型吗?
我要检查的URL模式,并在这个意义上有两种possiblities: - 基于域的 - 基于IP地址的
两个相似,但不同的,所以我想包括两个模式。
从Multiple Regex @Pattern's for 1 Field?我看到如何添加多个模式,但是这些模式充当AND操作。多个@Pattern的行为与OR操作相同
有什么方法可以应用OR类型吗?
我要检查的URL模式,并在这个意义上有两种possiblities: - 基于域的 - 基于IP地址的
两个相似,但不同的,所以我想包括两个模式。
按照你提供的链接上的例子后,你可以利用正则表达式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;
我不能对此进行测试的代码,因为我没有一个项目,但我只是用交替模式,在所有正则表达式引擎的工作原理。
一个解决方案是编写一个组合约束,例如MyURLPattern它在内部使用“Boolean composition of constraints”的Hibernate特定功能。在这种情况下,您还需要将@ConstraintComposition(OR)
注释添加到您的组合约束中。
需要注意的是,该解决方案在Bean验证提供程序之间不可移植。
我也想过你的方法,但由于正则表达式相当长,我正在寻找更“干净”的东西。不管怎么说,还是要谢谢你。 – jlanza
@jlanza好,这是一个与如何缩短正则表达式有关的不同问题。如果在这个问题中发布的答案解决了您的问题,那么您应该将您的问题标记为已解决并打开一个新问题。有关缩短你的正则表达式,那么你可以使用这个''(?=。*([0-9] | [a-z]))' –
感谢您的回应。这个问题通常与正则表达式相关,并且您的答案是正确的。有了我的评论,我只是说这已经在我的计划中,但我正在寻找一个Pattern.List,但其中包含OR,因此我可以得到不同的消息等。 – jlanza