JSR-303(javax.validation)中有正则表达式验证。例如:
@Pattern(regexp="[\w_\\.]+")
private String username;
当值无效(与正则表达式不匹配)时显示的默认消息类似于“必须匹配{regex}”。但是用户并不了解正则表达式,所以向他们展示它是无关紧要的。一个选项是只显示“用户名包含非法字符”,在大多数情况下它可能会很好。但是,显示哪个角色出错是件好事。
这不能用正则表达式直接实现 - 它匹配与否。您必须定义其他错过某些组件的模式,或者尝试从字符串中删除字符直到匹配,然后将这些字符显示给用户。
总的来说。另一个问题是如何使用javax.validation实现此目的。
所以,总结一下这个问题:
如何使用javax.validation显示有问题的字符,以便消息看起来像“字符?,*和$是非法的”
答案 0 :(得分:2)
我会使用验证模式的否定版本。所以你的模式就是:
[^\w_\\.]
在验证失败时,将其与输入字符串匹配并将结果输出给用户。