为什么以下模式验证不起作用

时间:2017-04-28 13:38:16

标签: java regex spring

@Pattern(regexp = "^[a-zA-Z0-9_-]*$", message = "Only alpha-numeric characters are allowed")
  private String recipientId;

我想只允许字母数字字符,但上面的验证不能像我期望的那样工作。它允许带有加号(+)的请求通过

1 个答案:

答案 0 :(得分:1)

使用括号时,连字符是用于定义范围的特殊字符,因此如果要匹配" - "。

,则应将其转义。

正则表达式应该是

[a-zA-Z0-9_\\-]*

注意:测试后,似乎您可以在使用括号时使用连字符而不使用连字符。

我更喜欢这种方式(\\w|-)*

  

\ w单词字符:[a-zA-Z_0-9]

问题可能不在正则表达式上,而是在使用验证注释的方式上。您可以直接在字段上或在getter上使用注释,但不能同时在两者上使用。您确定所有注释始终遵循相同的编码模式吗?

最后你是否使用注释@Valid来实际验证你的输入?