javax.validation.constraints中的转义序列无效

时间:2012-06-04 07:51:26

标签: java bean-validation hibernate-validator

我正在尝试使用Hibernate bean验证向我的Bean添加一个regExp。这是我的代码

@NotNull(message = "{register.pwd.invalid}")
    @Size(min = 6, max = 8, message = "{register.pwd.invalid}")
    @Pattern(regexp="^(?=.*\d)(?=.*[A-Z]).{6,8}$",message="{register.pwd.week}")
        public String getPwd()
    {
        return pwd;
    }

但是使用这个我得到了以下错误

Invalid escape sequence (valid ones are  \b  \t  \n  \f  \r  \"  \'  \\ )

好像我无法逃脱序列。 是否有任何方法或java方法来处理这个或我需要在regExp中做一些事情来处理这一切

1 个答案:

答案 0 :(得分:2)

您需要转义字符串文字中的反斜杠:

regexp="^(?=.*\\d)(?=.*[A-Z]).{6,8}$"

实际字符串值在该点只有一个反斜杠,因此正则表达式解析器会将其视为“\ d”。

请注意,这与Hibernate等没有任何关系。你可以用简单的字符串看到同样的东西:

// This will give the same problem
String x = "^(?=.*\d)(?=.*[A-Z]).{6,8}$";

// Demo of fix
String working = "^(?=.*\\d)(?=.*[A-Z]).{6,8}$";
System.out.println(working);