2016-06-07 109 views

回答

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; 

我不能对此进行测试的代码,因为我没有一个项目,但我只是用交替模式,在所有正则表达式引擎的工作原理。

+0

我也想过你的方法,但由于正则表达式相当长,我正在寻找更“干净”的东西。不管怎么说,还是要谢谢你。 – jlanza

+0

@jlanza好,这是一个与如何缩短正则表达式有关的不同问题。如果在这个问题中发布的答案解决了您的问题,那么您应该将您的问题标记为已解决并打开一个新问题。有关缩短你的正则表达式,那么你可以使用这个''(?=。*([0-9] | [a-z]))' –

+0

感谢您的回应。这个问题通常与正则表达式相关,并且您的答案是正确的。有了我的评论,我只是说这已经在我的计划中,但我正在寻找一个Pattern.List,但其中包含OR,因此我可以得到不同的消息等。 – jlanza

0

一个解决方案是编写一个组合约束,例如MyURLPattern它在内部使用“Boolean composition of constraints”的Hibernate特定功能。在这种情况下,您还需要将@ConstraintComposition(OR)注释添加到您的组合约束中。

需要注意的是,该解决方案在Bean验证提供程序之间不可移植。

相关问题