2011-04-07 102 views
2

在JSR-303(javax.validation)中有正則表達式驗證。例如:正則表達式驗證 - 顯示違規字符。 javax.validation

@Pattern(regexp="[\w_\\.]+") 
private String username; 

當該值是無效的顯示(不匹配正則表達式)的默認消息是一樣的東西「必須匹配正則表達式{}」。但用戶不理解正則表達式,因此將它展示給他們是無關緊要的。一個選項是隻顯示「用戶名包含非法字符」,在大多數情況下它可能會很好。但是,顯示哪個字符是錯誤的會很好。

這不能用正則表達式直接實現 - 它可以匹配也可以不匹配。您必須定義其他缺少某些組件的模式,或者嘗試從字符串中刪除字符,直到匹配,然後將這些字符顯示給用戶。

那是一般的。另一個問題是如何用javax.validation實現這一點。

因此,要總結的問題:「字符,*和$都是非法的」

如何與javax.validation顯示有問題的字符,因此該消息看起來像

+1

有時候,不要告訴什麼是非法的,而是說明什麼是合法的,這是個好主意。例如:「用戶名只能由數字和字母組成。」 – Ingo 2011-04-07 15:09:22

+0

@Ingo - 是的,但是當我們添加「下劃線和點」(「和短劃線」)時,它變得太冗長了。 – Bozho 2011-04-07 15:56:52

回答

2

我會去與您的驗證模式的否定版本。所以,你的模式也只是:

[^\w_\\.] 

驗證失敗,匹配針對輸入字符串並將結果輸出給用戶。

+0

不錯的主意。爲此,我需要一個自定義驗證器。 – Bozho 2011-04-07 14:22:33

+0

@Bozho - 不要忘記,如果你這樣做,你還需要一些東西來確保輸入不是空的。 – 2011-04-07 14:24:42