1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C#で文字列が数値かどうか判断する

Last updated at Posted at 2024-09-19

概要

文字列が数値かどうかを判断するメソッド

実は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;
    }
1
0
11

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?