全部, 我正在嘗試寫什麼應該是Struts2操作的簡單驗證。我有一個字段必須包含0或一個正整數,所以我試圖使用內置在正則表達式驗證器中的Struts2來完成此操作。我使用的正則表達式是'^ \ d * $',並且我測試了outside of struts2並相信它應該滿足我的需求。 (例如它匹配'23',但不匹配'abc'或'-5')。Struts2負數的正則表達式驗證問題
但是,當我在Struts2中使用該正則表達式模式時,它無法爲負數提供驗證錯誤。
這裏是我的struts2驗證XML片段:
<field name="editVO.capability.operationalQty">
<field-validator type="regex">
<param name="expression"><![CDATA[^\d*$]]></param>
<message key="errors.number"/>
</field-validator>
</field>
下面是一些在單元測試這個驗證我所看到的結果:
Input Validation Passes? Expected Result?
23 Yes Yes
abc No Yes
-5 Yes No
%5 No Yes
5- No Yes
a5 No Yes
正如你可以從上面的結果看,當我運行我的單元測試(或通過應用程序測試)時,當輸入'abc'或'5'時,我收到一條錯誤消息(如預期的那樣),但是' - '不是會觸發驗證失敗。如果它是第一個字符,我不知道爲什麼它允許' - '字符通過。
我會很感激任何Struts2相關的正則表達式技巧;請注意,我認爲這裏的錯誤是 與Struts2特別相關,它如何處理正則表達式,而不僅僅是一個正則表達式問題。 (fwiw - 當我嘗試這種模式時,我也遇到同樣的問題:'^ [0-9] * $')。
我假設有一個原因,爲什麼你使用字符串類型的數字?否則,您可以編輯'editVO.capability.operationalQty'和整數並使用整數最小驗證器? – nmc
我在我的動作中使用Integer字段作爲數字,但驗證在我們的struts2堆棧中進行類型轉換之前運行,因此驗證針對請求中的字符串運行。是的,我可以切換到使用整數和intRange驗證器的組合 - 事實上可能必須這樣做才能使其工作 - 這只是令人討厭,我無法弄清楚我目前的方法有什麼問題。 – elduff
隨機猜測:嘗試禁用'trim',http://struts.apache.org/2.x/docs/regex-validator.html – Qtax