【Java】文字サイズと形式のバリデーションチェック

■実装の概要

入力した文字列に対して、以下のチェックを行う処理を実装する。

  • 桁数が一致するか
    ただし、桁数チェック対象外の実装もつくる。
  • 指定された文字の形式(※)であるか
    ただし、文字形式チェック対象外の実装もつくる。

(※)文字形式の種別は以下の通りとする。

  • 数字のみ(0〜9)
  • 小文字のみ(a〜z)
  • 大文字のみ(A〜Z)
  • 数字・小文字のみ(必ず両方含む)
  • 数字・大文字のみ(必ず両方含む)
  • 小文字・大文字のみ(必ず両方含む)
  • 数字・小文字・大文字のみ(必ず3種類含む)

■フローチャート

文字の桁数および形式チェックに関するutil処理のフローを以下に示す。

開始
開始
チェック対象
文字列
チェック対象 文字列
あり
あり
なし
なし
エラー出力
エラー出力
コンソール
コンソール
エラー
エラー
return False
return False
長さ
長さ
0
0
0以外
0以外
長さチェック
処理結果
長さチェック 処理結果
true
true
false
false
return False
return False
形式
形式
free
free
free以外
free以外
形式チェック
処理結果
形式チェック 処理結果
true
true
false
false
return False
return False
終了
終了
return True
return True
1
1
1
1
1
1
1
1
Text is not SVG – cannot display

■サンプルコード

実装する処理のサンプルコードを以下に示す。

・ValidateLengthTypeUtil.java

package util;

import constant.CharTypeEnum;

public class ValidateLengthTypeUtil {

  public static boolean isValidateLengthType(String target, int length, CharTypeEnum charType) {

    if (target.isEmpty()) {
      System.out.println("チェック文字列:なし");
      return false;
    }

    // lengthに0を指定した場合は長さ判定を実施しない
    if (length != 0) {
      if (!isLength(target, length)) {
        return false;
      }

    }

    // FREE_TYPEの場合は文字タイプ判定を実施しない
    if (CharTypeEnum.FREE_TYPE != charType) {
      if (!isType(target, charType)) {
        return false;
      }
    }
    return true;
  }

  private static boolean isLength(String target, int length) {
    if (target.length() != length) {
      System.out.println(
          "[文字長さエラー]target.length(): " + target.length() + " |length: " + length);
      return false;
    }
    return true;
  }

  private static boolean isType(String target, CharTypeEnum charType) {
    if (!target.matches(charType.getPattern())) {
      System.out.println(
          "[文字タイプエラー]target: " + target + " |type: " + charType);
      return false;
    }
    return true;
  }
}

・CharTypeEnum.java

package constant;

public enum CharTypeEnum {
  ONLY_DIGITS("^[0-9]+$"),
  ONLY_LOWERCASE("^[a-z]+$"),
  ONLY_UPPERCASE("^[A-Z]+$"),
  ONLY_DIGITS_LOWERCASE("^[0-9a-z]+$"),
  ONLY_DIGITS_UPPERCASE("^[0-9A-Z]+$"),
  ONLY_LOWERCASE_UPPERCASE("^[a-zA-Z]+$"),
  ONLY_DIGITS_LOWERCASE_UPPERCASE("^[0-9a-zA-Z]+$"),
  FREE_TYPE("");

  private final String pattern;

  // コンストラクタ
  CharTypeEnum(String pattern) {
    this.pattern = pattern;
  }

  // ゲッター
  public String getPattern() {
    return pattern;
  }
}

・ValidateLengthTypeMain.java

import static util.ValidateLengthTypeUtil.isValidateLengthType;

import constant.CharTypeEnum;

public class ValidateLengthTypeMain {

  public static void main(String[] args) {
    String onlyDigitsTrue = "12398";
    String onlyLowerCaseTrue = "abcdxyz";
    String onlyUpperCaseTrue = "EGDYSHKF";
    String onlyDigitsLowerCaseTrue = "1a2s3d";
    String onlyDigitsUpperCaseTrue = "F4G5H6JKL";
    String onlyLowerUpperCaseTrue = "eFb";
    String onlyDigitsLowerUpperCaseTrue = "7iB8oN9pM0";
    String lengthFalse = "q2F";
    String typeFalse = "@]la";
    String emptyFalse = "";
    String freeLengthTypeTrue = "sdizhfsiuefhsoiefj]odsifj-3549[][@:";

    // 数字のみ(OK)
    System.out.println(
        "onlyDigitsTrue: " + onlyDigitsTrue + ": " +
            isValidateLengthType(onlyDigitsTrue, 5, CharTypeEnum.ONLY_DIGITS));

    System.out.println("====================");

    // 小文字のみ(OK)
    System.out.println(
        "onlyLowerCaseTrue: " + onlyLowerCaseTrue + ": " +
            isValidateLengthType(onlyLowerCaseTrue, 7, CharTypeEnum.ONLY_LOWERCASE));

    System.out.println("====================");

    // 大文字のみ(OK)
    System.out.println(
        "onlyUpperCaseTrue: " + onlyUpperCaseTrue + ": " +
            isValidateLengthType(onlyUpperCaseTrue, 8, CharTypeEnum.ONLY_UPPERCASE));

    System.out.println("====================");

    // 数字・小文字のみ(OK)
    System.out.println(
        "onlyDigitsLowerCaseTrue: " + onlyDigitsLowerCaseTrue + ": " +
            isValidateLengthType(onlyDigitsLowerCaseTrue, 6, CharTypeEnum.ONLY_DIGITS_LOWERCASE));

    System.out.println("====================");

    // 数字・大文字のみ(OK)
    System.out.println(
        "onlyDigitsUpperCaseTrue: " + onlyDigitsUpperCaseTrue + ": " +
            isValidateLengthType(onlyDigitsUpperCaseTrue, 9, CharTypeEnum.ONLY_DIGITS_UPPERCASE));

    System.out.println("====================");

    // 小文字・大文字のみ(OK)
    System.out.println(
        "onlyLowerUpperCaseTrue: " + onlyLowerUpperCaseTrue + ": " +
            isValidateLengthType(onlyLowerUpperCaseTrue, 3,
                CharTypeEnum.ONLY_LOWERCASE_UPPERCASE));

    System.out.println("====================");

    // 数字・小文字・大文字のみ(OK)
    System.out.println(
        "onlyDigitsLowerUpperCaseTrue: " + onlyDigitsLowerUpperCaseTrue + ": " +
            isValidateLengthType(onlyDigitsLowerUpperCaseTrue, 10,
                CharTypeEnum.ONLY_DIGITS_LOWERCASE_UPPERCASE));

    System.out.println("====================");

    // 長さチェック(NG)
    System.out.println(
        "lengthFalse: " + lengthFalse + ": " +
            isValidateLengthType(lengthFalse, 99,
                CharTypeEnum.ONLY_DIGITS_LOWERCASE_UPPERCASE));

    System.out.println("====================");

    // タイプチェック(NG)
    System.out.println(
        "typeFalse: " + typeFalse + ": " +
            isValidateLengthType(typeFalse, 4,
                CharTypeEnum.ONLY_DIGITS_LOWERCASE_UPPERCASE));

    System.out.println("====================");

    // チェック文字列なし(NG)
    System.out.println(
        "emptyFalse: " + emptyFalse + ": " +
            isValidateLengthType(emptyFalse, 12,
                CharTypeEnum.ONLY_DIGITS));

    System.out.println("====================");

    // 文字長さ・タイプチェックなし(OK)
    System.out.println(
        "freeLengthTypeTrue: " + freeLengthTypeTrue + ": " +
            isValidateLengthType(freeLengthTypeTrue, 0,
                CharTypeEnum.FREE_TYPE));

  }
}

■実行結果

ValidateLengthTypeMainの実行結果を以下に示す。

onlyDigitsTrue: 12398: true
====================
onlyLowerCaseTrue: abcdxyz: true
====================
onlyUpperCaseTrue: EGDYSHKF: true
====================
onlyDigitsLowerCaseTrue: 1a2s3d: true
====================
onlyDigitsUpperCaseTrue: F4G5H6JKL: true
====================
onlyLowerUpperCaseTrue: eFb: true
====================
onlyDigitsLowerUpperCaseTrue: 7iB8oN9pM0: true
====================
[文字長さエラー]target.length(): 3 |length: 99
lengthFalse: q2F: false
====================
[文字タイプエラー]target: @]la |type: ONLY_DIGITS_LOWERCASE_UPPERCASE
typeFalse: @]la: false
====================
チェック文字列:なし
emptyFalse: : false
====================
freeLengthTypeTrue: sdizhfsiuefhsoiefj]odsifj-3549[][@:: true

コメント