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