2016-10-27 4 views
0

です。Java Beanの検証のパターンに問題があります。 私はJavaのクラスJava beanの検証大文字の範囲が

@Pattern(regexp = ".*[A-Z]+[[A-Z]\\p{Space}]+[A-Z\\p{Punct}]+([0-9]{1,10})?", message = "Error")* 
private String name; 

の内側に私の変数のためのパターンを持っており、実際にそれが働いているが、今、私は大文字の言葉に範囲{0,32}を追加する必要があります。 私は[AZ] {0,32}を添加する場合、それは

を分解する

  1. PROFILE以下の値収まるべきである - 真
  2. P - 真
  3. PRO - 真
  4. PROFILEPROFILEPROFILEPROFILEPROF - true
  5. PROFILEPROFILEPROFILEPROFILEPROFI - false
  6. プロファイル名 - 偽
  7. というプロファイル - 真
  8. PROFILE100 - 真
  9. PROFILE1000 - 真
  10. PROFILE1000000 - 真
  11. 1111から
  12. 偽PROFILEPROFILE123456789PROFILE123 - 偽
  13. たprofile_name - 偽
  14. * ^^ @ - 偽
  15. プロファイル名 - true
  16. PROFILE_NAME - true
  17. PROFILE。 - 真
  18. &)12P - 偽
  19. 11PROFILE - 真
  20. 1234PROFILE - 真
  21. の$%の#のPROFILE - 真
  22. 何も - 偽

方法を変更/リファクタリングパターンを大文字の範囲を追加する可能性があり、2,5,12が有効でしょうか?

溶液 "(?=。* [AZ])[\ P {PUNCT} A-Z0-9] {1,32}"

+0

完全なパターンは何ですか? –

+0

実際には完全なパターンですが、大文字のアルファベット[A-Z] {0,32}の範囲を追加したいときは壊れます 大文字の範囲を追加するにはどのようにパターンを変更/リファクタリングするのですか? –

+0

*範囲を追加するとどういう意味ですか? –

答えて

1

あなたは

@Pattern(regexp = "(?=.*[A-Z])[\\p{Punct}A-Z0-9 ]{1,32}", message = "Error") 

を使用することがありますパターンはデフォルトで固定されているので(それは.matches()方法と共に使用される)regex demo

を参照して、全く^$パターンの周りに必要ではありません。

それは一致します

  • (?=.*[A-Z]) - 改行文字以外の任意の0+文字を少なくとも1がなければならないの後に大文字のASCII文字
  • [\\p{Punct}A-Z0-9 ]{1,32} - 試合1から32までの大文字のASCII文字、数字、スペースまたはPunct POSIX文字クラスの文字(句読点や記号を含む)。
関連する問題