C# バリデーションチェック


データ型

整数

// 整数の入力を受け付ける
int integerInput = GetIntegerInput("整数を入力してください:");


static int GetIntegerInput(string prompt)
    {
        int input;
        bool isValid = false;

        do
        {
            Console.WriteLine(prompt);
            isValid = int.TryParse(Console.ReadLine(), out input);
        } while (!isValid);

        return input;
    }

整数:負の数はダメ

// 整数の入力を受け付ける
int integerInput = GetNonNegativeIntegerInput("非負の整数を入力してください:");


static int GetNonNegativeIntegerInput(string prompt)
    {
        int input;
        bool isValid = false;

        do
        {
            Console.WriteLine(prompt);
            isValid = int.TryParse(Console.ReadLine(), out input) && input >= 0;
        } while (!isValid);

        return input;
    }

整数:桁数

// 整数の桁数を取得
int integerInput = GetIntegerInput("整数を入力してください:");


static int GetIntegerInput(string prompt)
{
    int input;
    bool isValid = false;
    int digits = 3; //桁数はこの変数を変える

    do
    {
        Console.WriteLine(prompt);
        isValid = int.TryParse(Console.ReadLine(), out input);

        if (isValid)
        {
            int tempInput = input;
            int increment = 0;

            while (tempInput != 0)
            {
                tempInput /= 10;
                increment++;
            }
            if (increment != digits)
            {
                isValid = false;
            }
        }

    } while (!isValid);

    return input;
}

整数:範囲

int currentMonth =GetValidMonth("整数を入力してください:");


static int GetValidMonth(string prompt)
{
    int input;
    bool isValid = false;

    do
    {
        Console.Write(prompt);
        isValid = int.TryParse(Console.ReadLine(), out input) && input >= 1 && input <= 12;

        if (!isValid)
        {
            Console.WriteLine("有効な月を入力してください。");
        }

    } while (!isValid);

    return input;
}

実数

// 実数の入力を受け付ける
double doubleInput = GetDoubleInput("実数を入力してください:");


static double GetDoubleInput(string prompt)
    {
        double input;
        bool isValid = false;

        do
        {
            Console.WriteLine(prompt);
            isValid = double.TryParse(Console.ReadLine(), out input);
        } while (!isValid);

        return input;
    }

実数:負の数はダメ

// 負の数を受け付けない実数の入力
double positiveDouble = GetPositiveDouble("正の実数を入力してください:");
static double GetPositiveDouble(string prompt)
    {
    double number;
    bool isValid = false;

    do
    {
        Console.WriteLine(prompt);
        isValid = double.TryParse(Console.ReadLine(), out number) && number >= 0;

        if (!isValid)
        {
            Console.WriteLine("正の実数を入力してください。");
        }

    } while (!isValid);

    return number;
}

実数:小数点の桁数

// 小数点の桁数を制限した実数の入力
double limitedDecimalDouble = GetLimitedDecimalDouble("小数点以下2桁までの実数を入力してください:");

static double GetLimitedDecimalDouble(string prompt)
{
    double number;
    bool isValid = false;

    do
    {
        Console.WriteLine(prompt);
        isValid = double.TryParse(Console.ReadLine(), out number) && Math.Round(number, 2) == number;

        if (!isValid)
        {
            Console.WriteLine("小数点以下2桁までの実数を入力してください。");
        }

    } while (!isValid);

    return number;
}

実数:範囲

// 範囲を指定した実数の入力
double rangedDouble = GetRangedDouble("10から20の範囲の実数を入力してください:", 10, 20);

static double GetRangedDouble(string prompt, double min, double max)
{
    double number;
    bool isValid = false;

    do
    {
        Console.WriteLine(prompt);
        isValid = double.TryParse(Console.ReadLine(), out number) && number >= min && number <= max;

        if (!isValid)
        {
            Console.WriteLine($"有効な範囲である{min}から{max}の実数を入力してください。");
        }

    } while (!isValid);

    return number;
}

文字列

特定(アルファベット)の文字のみ使用

// 特定の文字のみを使用する文字列の入力
string specificCharsString = GetSpecificCharsInput("特定の文字のみを使用する文字列を入力してください:");


static string GetSpecificCharsInput(string prompt)
{
    string input;

    do
    {
        Console.WriteLine(prompt);
        input = Console.ReadLine();
        // 例として、すべての文字がアルファベットであることを確認
    } while (!input.All(char.IsLetter)); 

    return input;
}

文字数

// 文字数を指定した文字列の入力
string limitedLengthString = GetLimitedLengthString("5文字から10文字までの文字列を入力してください:", 5, 10);


// 文字数を指定した文字列の入力
static string GetLimitedLengthString(string prompt, int minLength, int maxLength)
{
    string input;

    do
    {
        Console.WriteLine(prompt);
        input = Console.ReadLine();
    } while (input.Length < minLength || input.Length > maxLength);

    return input;
}

ファイルパス

// ファイルパスの入力
string filePath = GetFilePath("ファイルパスを入力してください:");



// ファイルパスの入力
static string GetFilePath(string prompt)
{
    string input;

    do
    {
        Console.WriteLine(prompt);
        input = Console.ReadLine();
        // 存在するファイルパスかどうかを確認
    } while (!File.Exists(input)); 

    return input;
}

金額(小数点あり)

// 金額の入力
double amount = GetAmount("金額を入力してください:");



// 金額の入力
static double GetAmount(string prompt)
{
    double amount;

    do
    {
        Console.WriteLine(prompt);
        // 負の数でないことを確認

    } while (!double.TryParse(Console.ReadLine(), out amount) || amount < 0); 

    return amount;
}

権限(UNIX系システム)

  • r(読み取り許可)

  • w(書き込み許可)

  • x(実行許可)

string permission = GetValidPermission("権限を入力してください:");
Console.WriteLine($"入力された権限: {permission}");


static string GetValidPermission(string prompt)
{
    string permission;
    bool isValid = false;

    do
    {
        Console.WriteLine(prompt);
        permission = Console.ReadLine();
        isValid = IsPermissionValid(permission);

        if (!isValid)
        {
            Console.WriteLine("有効な権限を入力してください。");
        }

    } while (!isValid);

    return permission;
}

static bool IsPermissionValid(string permission)
{
    // 権限の正規表現パターン
    string pattern = @"^[r-][w-][x-]{3}$";

    // 正規表現を使って権限がパターンに一致するかどうかをチェック
    return Regex.IsMatch(permission, pattern);
}

ユーザー名

string username = GetValidUsername("ユーザー名を入力してください:");

Console.WriteLine($"入力されたユーザー名: {username}");



atic string GetValidUsername(string prompt)
{
    string username;
    bool isValid = false;

    do
    {
        Console.WriteLine(prompt);
        username = Console.ReadLine();
        isValid = IsUsernameValid(username);

        if (!isValid)
        {
            Console.WriteLine("有効なユーザー名を入力してください。");
        }

    } while (!isValid);

    return username;
}

static bool IsUsernameValid(string username)
{
    // ユーザー名の正規表現パターン
    string pattern = @"^[a-zA-Z0-9_-]{3,16}$"; // 英数字、アンダースコア、ハイフンのみを許可し、長さが3〜16文字であることを確認

    // 正規表現を使ってユーザー名がパターンに一致するかどうかをチェック
    return Regex.IsMatch(username, pattern);
}

メールアドレス

// メールアドレスの入力
static string GetEmail(string prompt)
{
    string email;

    do
    {
        Console.WriteLine(prompt);
        email = Console.ReadLine();
    } while (!IsValidEmail(email)); // メールアドレスの形式が正しいことを確認

    return email;
}



static bool IsValidEmail(string email)
{
    try
    {
        var mailAddress = new MailAddress(email);
        return true;
    }
    catch (FormatException)
    {
        return false;
    }
}

電話番号

// 電話番号の入力
string phoneNumber = GetPhoneNumber("電話番号を入力してください:");



static string GetPhoneNumber(string prompt)
{
    string phoneNumber;

    do
    {
        Console.WriteLine(prompt);
        phoneNumber = Console.ReadLine();
    } while (!IsValidPhoneNumber(phoneNumber)); // 電話番号の形式が正しいことを確認

    return phoneNumber;
}

郵便番号

string postalCode = GetValidPostalCode("郵便番号を入力してください:");

Console.WriteLine($"入力された郵便番号: {postalCode}");



static string GetValidPostalCode(string prompt)
{
    string postalCode;
    bool isValid = false;

    do
    {
        Console.WriteLine(prompt);
        postalCode = Console.ReadLine();
        isValid = IsPostalCodeValid(postalCode);

        if (!isValid)
        {
            Console.WriteLine("有効な郵便番号を入力してください。");
        }

    } while (!isValid);

    return postalCode;
}

static bool IsPostalCodeValid(string postalCode)
{
    // 郵便番号の正規表現パターン
    string pattern = @"^\d{3}-\d{4}$"; // XXX-XXXX形式の数字のみを許可

    // 正規表現を使って郵便番号がパターンに一致するかどうかをチェック
    return Regex.IsMatch(postalCode, pattern);
}

URL

// URLの入力
string url = GetUrl("URLを入力してください:");


static bool IsValidUrl(string url)
{
    Uri result;
    return Uri.TryCreate(url, UriKind.Absolute, out result)
        && (result.Scheme == Uri.UriSchemeHttp || result.Scheme == Uri.UriSchemeHttps); // HTTPまたはHTTPSのURLかどうかを確認
}
}

日付

範囲・整数としてチェックしている

int year = GetValidYear("年を入力してください:");
int month = GetValidMonth("月を入力してください:");
int day = GetValidDay("日を入力してください:");



static int GetValidYear(string prompt)
{
    int year;
    bool isValid = false;

    do
    {
        Console.Write(prompt);
        isValid = int.TryParse(Console.ReadLine(), out year);

        if (!isValid)
        {
            Console.WriteLine("有効な年を入力してください。");
        }

    } while (!isValid);

    return year;
}

static int GetValidMonth(string prompt)
{
    int month;
    bool isValid = false;

    do
    {
        Console.Write(prompt);
        isValid = int.TryParse(Console.ReadLine(), out month) && month >= 1 && month <= 12;

        if (!isValid)
        {
            Console.WriteLine("有効な月を入力してください(1から12の間)。");
        }

    } while (!isValid);

    return month;
}

static int GetValidDay(string prompt)
{
    int day;
    bool isValid = false;

    do
    {
        Console.Write(prompt);
        isValid = int.TryParse(Console.ReadLine(), out day) && day >= 1 && day <= 31;

        if (!isValid)
        {
            Console.WriteLine("有効な日を入力してください(1から31の間)。");
        }

    } while (!isValid);

    return day;
}

日付:存在する日か

public static void BaseObject2(string[] args)
{
    DateTime date = GetValidDate("日付を入力してください:");

    Console.WriteLine($"入力された日付(YYYY/MM/DD): {date.ToShortDateString()}");
}



static DateTime GetValidDate(string prompt)
{
    DateTime date;
    bool isValid = false;

    do
    {
        Console.Write(prompt);
        isValid = DateTime.TryParse(Console.ReadLine(), out date) && IsDateValid(date);

        if (!isValid)
        {
            Console.WriteLine("有効な日付を入力してください。");
        }

    } while (!isValid);

    return date;
}

static bool IsDateValid(DateTime date)
{
    // うるう年の検証
    if (date.Year % 4 == 0 && (date.Year % 100 != 0 || date.Year % 400 == 0))
    {
        // うるう年の場合、2月の日数は29日
        if (date.Month == 2 && date.Day > 29)
        {
            return false;
        }
    }
    else
    {
        // うるう年でない場合、2月の日数は28日
        if (date.Month == 2 && date.Day > 28)
        {
            return false;
        }
    }

    // 月の日数の検証
    if (date.Day < 1 || date.Day > DateTime.DaysInMonth(date.Year, date.Month))
    {
        return false;
    }

    // 日付の妥当性の検証
    return true;
}

この記事が気に入ったらサポートをしてみませんか?