從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