S2Strutsでひらがなバリデート

ひらがなのみしか受け付けないようにしたかったんで、こんな感じでMaskのバリデートを書いてみたけどひっかかってくれなかった。

@Mask(pattern="^[\\u3040-\\u309F]+$", messageKey="error.validate.hiragana")

んで次のでもダメ

@Mask(pattern="[\\p{InHiragana}]*", messageKey="error.validate.hiragana")

あれれ?おかしい??ぜんぜんひっかかってくれないとですよ。上の2パターンをこんな感じでコード書いたらバリバリひっかかるのに。。。

Pattern p = Pattern.compile("^[\\u3040-\\u309F]+$");  // もしくはPattern.compile("[\\p{InHiragana}]*");
Matcher matcher = p.matcher("ほげほげ");
matcher.matches();

しょうがないからこんな感じでバリデート書くはめになった

public class FullTextHiraganaValidator {
  
  /**
   * ひらがなパターン
   * ^[\\u3040-\\u309F]+$でも[\\p{InHiragana}]*でもひらがなチェックするので、
   * どちらでもOK。
   */
  private static final String P_HIRAGANA_ONLY = "[\\p{InHiragana}]*";

  public static boolean validate(Object bean,
    ValidatorAction validatorAction, Field field,
    ActionMessages errors, Validator validator,
    HttpServletRequest request) {
    
    String value = ValidatorUtils.getValueAsString(bean, field.getProperty());
    Pattern p = Pattern.compile(P_HIRAGANA_ONLY);
    Matcher matcher = p.matcher(value);
    if (matcher.matches()){
      return true;
    } else {
      errors.add(field.getKey(), Resources.getActionMessage(
          validator, request, validatorAction, field));
      return false;
    }
  }
}