2016-06-07 115 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驗證提供程序之間不可移植。

相關問題