0

我正在尝试使用 Hibernate bean Validation 向我的 Bean 添加一个正则表达式。这是我的代码

@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中做一些事情来处理这一切

4

1 回答 1

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);
于 2012-06-04T07:54:05.490 回答