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; } } }