【发布时间】:2011-07-21 06:08:21
【问题描述】:
所有, 我正在尝试为 Struts2 操作编写简单的验证。我有一个必须包含 0 或正整数的字段,因此我尝试使用 Struts2 内置的正则表达式验证器来完成此操作。我使用的正则表达式是'^\d*$',我已经测试了outside of struts2 并相信它应该满足我的需求。 (例如,它匹配 '23',但不匹配 'abc' 或 '-5')。
但是,当我在 Struts2 中使用该正则表达式模式时,它无法给我一个负数验证错误。
这是我的 struts2 验证 xml sn-p:
<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-”时收到错误消息(如预期的那样),但是“- 5' NOT 会触发验证失败。如果它是第一个字符,我不知道为什么它允许'-' 字符通过。
如果有任何 Struts2 相关的正则表达式技巧,我将不胜感激;请注意,我相信这里的错误是 某种程度上与 Struts2 以及它如何处理正则表达式有关,而不仅仅是一个正则表达式问题。 (fwiw - 当我尝试这种模式时,我也遇到了同样的问题:'^[0-9]*$')。
【问题讨论】:
-
我认为您使用字符串类型作为数字是有原因的?否则你可以制作
editVO.capability.operationalQty和整数并使用整数最小值验证器? -
我在操作中使用整数字段作为数字,但验证在我们的 struts2 堆栈中的类型转换之前运行,因此验证针对请求中的字符串运行。是的,我可以切换到使用整数和 intRange 验证器的组合 - 实际上可能必须这样做才能使其正常工作 - 我无法弄清楚我目前的方法有什么问题,这很烦人。
-
随机猜测:尝试禁用
trim, struts.apache.org/2.x/docs/regex-validator.html