### 値チェックモジュール
public class ValueChecker
{
public enum CheckResult
{
Null,
NotNull,
Empty,
NotEmpty,
WhiteSpace,
NotWhiteSpace,
NotNullAndEmptyAndWhiteSpace,
Contains,
NotContain,
NotAllContain,
ValidFormat,
InvalidFormat,
InRange,
OutOfRange,
ValidType,
InvalidType,
FailedCast,
}
/// <summary>
/// 指定されたオブジェクトが null かどうかを判定
/// </summary>
/// <typeparam name="T">チェックするオブジェクトの型</typeparam>
/// <param name="obj">チェック対象のオブジェクト</param>
/// <returns>チェック結果</returns>
public static CheckResult CheckIsNull<T>(T obj)
{
return obj == null ? CheckResult.Null : CheckResult.NotNull;
}
/// <summary>
/// 指定された文字列が空文字かどうかを判定
/// </summary>
/// <param name="str">チェック対象の文字列</param>
/// <returns>チェック結果</returns>
public static CheckResult CheckIsEmpty(string str)
{
return str == null ? CheckResult.Null : str.Length == 0 ? CheckResult.Empty : CheckResult.NotEmpty;
}
/// <summary>
/// 指定された文字列が空白文字かどうかを判定
/// </summary>
/// <param name="str">チェック対象の文字列</param>
/// <returns>チェック結果</returns>
public static CheckResult CheckIsWhiteSpace(string str)
{
return str == null ? CheckResult.Null : string.IsNullOrWhiteSpace(str) ? CheckResult.WhiteSpace : CheckResult.NotWhiteSpace;
}
/// <summary>
/// 指定された文字列が null または 空文字 または 空白文字かどうかを判定
/// 全てに当てはまらない場合は NotNullAndEmptyAndWhiteSpace を返す
/// </summary>
/// <param name="str">チェック対象の文字列</param>
/// <returns>チェック結果</returns>
public static CheckResult CheckIsNullOrEmptyOrWhiteSpace(string str)
{
if (str == null) return CheckResult.Null;
if (str.Length == 0) return CheckResult.Empty;
return string.IsNullOrWhiteSpace(str) ? CheckResult.WhiteSpace : CheckResult.NotNullAndEmptyAndWhiteSpace;
}
/// <summary>
/// 指定された値に指定した値が含まれているかどうかを判定
/// </summary>
/// <typeparam name="T">チェックに指定する値の型</typeparam>
/// <param name="str">チェック対象の文字列</param>
/// <param name="valueToCheck">チェックに指定する値</param>
/// <returns>チェック結果</returns>
public static CheckResult CheckContainsSpecifiedValue<T>(object str, T valueToCheck)
{
if (str == null) return CheckResult.Null;
if (valueToCheck == null) return CheckResult.Null;
if (!(str is string strValue || str is IConvertible)) return CheckResult.InvalidType;
strValue = str.ToString();
return strValue.Contains(valueToCheck.ToString()) ? CheckResult.Contains : CheckResult.NotContain;
}
/// <summary>
/// 指定された値に指定した値のいずれか含まれているか または すべて含まれているかを判定
/// </summary>
/// <typeparam name="T">チェックに指定する配列の型</typeparam>
/// <param name="type">判定の種類 ("ANY" または "ALL")</param>
/// <param name="str">チェック対象の文字列</param>
/// <param name="valuesToCheck">チェックする値の配列</param>
/// <returns>チェック結果</returns>
public static CheckResult CheckContainsAnyOrAllSpecifiedValues<T>(string type, object str, params T[] valuesToCheck)
{
type = type.ToUpper();
if (str == null) return CheckResult.Null;
if (!(str is string strValue || str is IConvertible)) return CheckResult.InvalidType;
strValue = str.ToString();
if (valuesToCheck == null) return CheckResult.Null;
if (valuesToCheck.Length == 0) return CheckResult.Empty;
for (int i = 0; i < valuesToCheck.Length; i++)
{
if (valuesToCheck[i] == null) return CheckResult.InvalidType;
}
if (type == "ALL")
{
return valuesToCheck.All(value => strValue.Contains(value.ToString()))
? CheckResult.Contains
: CheckResult.NotAllContain;
}
else if (type == "ANY")
{
return valuesToCheck.Any(value => strValue.Contains(value.ToString()))
? CheckResult.Contains
: CheckResult.NotContain;
}
else
{
return CheckResult.InvalidType;
}
}
/// <summary>
/// 指定された文字列が特定のフォーマットに一致するかどうかを判定
/// </summary>
/// <param name="value">チェック対象の文字列</param>
/// <param name="pattern">正規表現パターン</param>
/// <returns>チェック結果</returns>
public static CheckResult CheckIsValidFormat(object value, string pattern)
{
if (value == null) return CheckResult.Null;
if (!(value is string strValue || value is IConvertible)) return CheckResult.InvalidType;
strValue = value.ToString();
return Regex.IsMatch(strValue, pattern) ? CheckResult.ValidFormat : CheckResult.InvalidFormat;
}
/// <summary>
/// 指定された数値が指定された範囲内かどうかを判定
/// </summary>
/// <typeparam name="T">チェックする数値の型</typeparam>
/// <param name="value">チェック対象の数値</param>
/// <param name="min">範囲の最小値</param>
/// <param name="max">範囲の最大値</param>
/// <returns>チェック結果</returns>
public static CheckResult CheckIsInRange<T>(T value, decimal min, decimal max) where T : struct, IConvertible
{
try
{
decimal numericValue = Convert.ToDecimal(value, CultureInfo.InvariantCulture);
return numericValue >= min && numericValue <= max ? CheckResult.InRange : CheckResult.OutOfRange;
}
catch (InvalidCastException)
{
return CheckResult.FailedCast;
}
catch (FormatException)
{
return CheckResult.InvalidFormat;
}
}
/// <summary>
/// 指定されたオブジェクトが指定された型かどうかを確認
/// </summary>
/// <typeparam name="T">チェックする型</typeparam>
/// <param name="input">チェック対象のオブジェクト</param>
/// <returns>チェック結果</returns>
public static CheckResult CheckIsOfType<T>(object input)
{
if (input == null) return CheckResult.Null;
return input is T ? CheckResult.ValidType : CheckResult.InvalidType;
}
/// <summary>
/// 指定された文字列内の全角数字を半角数字に変換
/// </summary>
/// <param name="input">チェック対象の文字列</param>
/// <returns>変換後文字列</returns>
public static string ConvertFullWidthToHalfWidth(string input)
{
if (input == null) return null;
// 全角数字を半角数字に変換
return input.Replace('0', '0')
.Replace('1', '1')
.Replace('2', '2')
.Replace('3', '3')
.Replace('4', '4')
.Replace('5', '5')
.Replace('6', '6')
.Replace('7', '7')
.Replace('8', '8')
.Replace('9', '9');
}
}