0

HibernateBeanValidationを使用して正規表現を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メソッドはありますか、またはこれをすべて処理するために正規表現で何かを行う必要がありますか?

4

1 に答える 1

2

文字列リテラルのバックスラッシュをエスケープする必要があります。

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

実際の文字列値には、その時点でバックスラッシュが1つしかないため、正規表現パーサーはそれを「\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 に答える