我正在尝试使用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中做一些事情来处理这一切
答案 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);