概要
文字列が数値かどうかを判断するメソッド
実はchar[]をchar[]のまま数値かどうかを判断する必要が生まれたため作成した。
そのため文字列の数値チェックは副産物
コード
NumericCheck.cs
public static bool IsNumeric(string value)
{
if (string.IsNullOrWhiteSpace(value)) return false;
return IsNumeric(value.ToCharArray());
}
public static bool IsNumeric(char[] chars)
{
char c;
int idx = 0;
// 先頭が符号の場合は飛ばす
c = chars[idx];
if (c == '+' || c == '-') // *1修正
{
if (chars.Length == 1) return false;
idx++;
}
// 1文字目の数字チェック
c = chars[idx]; idx++;
if (IsDecimal(c) == false) return false;
// 2文字目以降の数字チェック
while (idx < chars.Length)
{
c = chars[idx]; idx++;
// 小数点がある場合はループを抜ける
if (c == '.') break;
if (IsDecimal(c) == false) return false;
}
// 小数点以降の数字チェック(小数点がない場合は通らない)
while (idx < chars.Length)
{
c = chars[idx]; idx++;
if (IsDecimal(c) == false) return false;
}
return true;
}
public static bool IsDecimal(char c)
{
if (c < '0' || '9' < c) return false;
return true;
}
*1 2024/09/22修正
c = chars[idx];
- if (c == '+' || c == '-') idx++;
+ if (c == '+' || c == '-')
+ {
+ if (chars.Length == 1) return false;
+ idx++;
+ }
応用
少し応用すれば、整数かどうかをチェックするコードが作れる。
NumericCheck.cs
public static bool IsDecimal(string value)
{
if (string.IsNullOrWhiteSpace(value)) return false;
return IsDecimal(value.ToCharArray());
}
public static bool IsDecimal(char[] chars)
{
char c;
int idx = 0;
c = chars[idx];
if (c == '+' || c == '-') idx++;
c = chars[idx]; idx++;
if (IsDecimal(c) == false) return false;
while (idx < chars.Length)
{
c = chars[idx]; idx++;
// 小数点がある場合はループを抜ける
if (c == '.') break;
if (IsDecimal(c) == false) return false;
}
// 小数点以降の数字チェック(小数点がない場合は通らない)
while (idx < chars.Length)
{
c = chars[idx]; idx++;
// 小数点以下に0以外があったら抜ける
if (c != '0') return false;
}
return true;
}