【问题标题】:Regex validation - show offending character(s). javax.validation正则表达式验证 - 显示违规字符。 javax.验证
【发布时间】: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


【解决方案1】:

我会使用您的验证模式的否定版本。所以你的模式就是:

[^\w_\\.]

验证失败时,将其与输入字符串匹配并将结果输出给用户。

【讨论】:

  • @Bozho - 不要忘记,如果你这样做,你还需要一些东西来确保输入不为空。
猜你喜欢
  • 1970-01-01
  • 2013-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-10
  • 1970-01-01
相关资源
最近更新 更多