Validator 框架(Struts 1.2.9)預定義多種驗證規則,於 validator.xml <field> 的 depends 屬性指定。本文整理所有內建驗證器、觸發條件與參數變數,並詳細說明進階 validwhen 邏輯驗證。
| 驗證器名稱 | 參數變數 | 觸發條件(驗證失敗時) |
|---|---|---|
| required | — | 欄位僅含空白字元 |
| validwhen | test | test 條件判斷為 false(見下文) |
| minlength | minlength | 字元數小於 minlength |
| maxlength | maxlength | 字元數大於 maxlength |
| mask | mask | 值不符合指定正則表達式 |
| byte, short, integer, long, float, double | — | 無法轉換為對應數值型別 |
| date | datePattern / datePatternStrict | 無法依指定格式轉換為日期 |
| intRange, floatRange, doubleRange | min, max | 數值不在 [min, max] 範圍內 |
| creditCard | — | 非合法信用卡號(Luhn 演算法) |
| — | 非合法 Email 格式 | |
| url | allowAllSchemes, allow2Slashes, noFragments, schemes | 非合法 URL 格式 |
詳細規格請參考官方文件:Validator 用戶指南
validwhen 允許以邏輯運算式表達欄位間關係,語法支援:
*this* 代表當前欄位值field3[1]field2.name==、!=、<、>、&&(and)、||(or)、括號分組<field property="password1" depends="validwhen">
<msg name="validwhen" key="error.password1.confirmation" />
<var>
<var-name>test</var-name>
<var-value>(password1 != null) and (*this* == password)</var-value>
</var>
</field>
含義:password1 不為空且等於 password 欄位值。
<field property="field1" depends="validwhen">
<msg name="validwhen" key="error.field.message" />
<var>
<var-name>test</var-name>
<var-value>(*this* == field2.name) and (*this* != field3[1])</var-value>
</var>
</field>
含義:當前值等於 field2.name 且不等於 field3 陣列索引 1 的值。
熟悉內建驗證器可覆蓋 90% 以上表單驗證需求。validwhen 提供強大的跨欄位邏輯驗證能力,配合 mask 正則表達式,幾乎能處理所有業務規則而無需撰寫 Java 驗證碼。