【发布时间】:2011-07-31 17:04:13
【问题描述】:
JSR-303 (javax.validation) 中有正则表达式验证。例如:
@Pattern(regexp="[\w_\\.]+")
private String username;
当值无效(不匹配正则表达式)时显示的默认消息类似于“必须匹配 {regex}”。但是用户不了解正则表达式,因此向他们展示它是无关紧要的。一个选项是只显示“用户名包含非法字符”,在大多数情况下它可能会很好。但是最好显示哪个字符是错误的。
这不能用正则表达式直接实现——它要么匹配要么不匹配。您必须定义缺少某些组件的其他模式,或者尝试从字符串中删除字符直到匹配,然后将这些字符显示给用户。
一般来说。另一个问题是如何使用 javax.validation 来实现这一点。
所以,总结一下这个问题:
如何使用 javax.validation 显示违规字符,使消息看起来像“字符?、* 和 $ 是非法的”
【问题讨论】:
-
有时,最好不要说什么是非法的,而是说明什么是合法的。例如:“用户名只能由数字和字母组成。”
-
@Ingo - 是的,但是当我们添加“下划线和点”(“和破折号和波浪号”)时,它变得太冗长了。
标签: java regex validation