C# 文字列が正の整数であるかを判定する

  • 作成日 2023.03.03
  • C#
C# 文字列が正の整数であるかを判定する

C#で、文字列が正の整数であるかを判定するサンプルコードを記述してます。「Regex.IsMatch」で正規表現を使用することで可能です。

環境

  • OS windows10 pro 64bit
  • Microsoft Visual Studio Community 2022 Version 17.2.3

文字列が正の整数であるかを判定

文字列が正の整数であるかを判定するには、「Regex.IsMatch」で正規表現を使用します。

using System;
using System.Text.RegularExpressions;

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {

            string txt = "123";

            if (Regex.IsMatch(txt, @"^[0-9]+$"))
            {
                Console.WriteLine("数値です");
            }
            else
            {
                Console.WriteLine("数値ではありません");
            }

        }
    }
}

実行結果をみると、判定されていることが確認できます。

関数化して、他のパターンを判定してみます。

using System;
using System.Text.RegularExpressions;

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {

            string txt = "123";

            Console.WriteLine(Chk(txt)); // true

            txt = "012";

            Console.WriteLine(Chk(txt)); // true

            txt = "123";

            Console.WriteLine(Chk(txt)); // false

            txt = "A";

            Console.WriteLine(Chk(txt)); // false

        }

        static Boolean Chk(String txt)
        {
            return Regex.IsMatch(txt, @"^[0-9]+$");
        }

    }

}

判定されていることが確認できます。

全角の数値も判定するのであれば、正規表現部分を以下のように変更します。

Regex.IsMatch(txt, @"^[\d]+$");

char.IsDigit

「char.IsDigit」を使用しても、判定することは可能です。

using System;
using System.Linq;

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {

            string txt = "123";

            Console.WriteLine(Chk(txt)); // true

            txt = "012";

            Console.WriteLine(Chk(txt)); // true

            txt = "123";

            Console.WriteLine(Chk(txt)); // true

            txt = "A";

            Console.WriteLine(Chk(txt)); // false

        }

        static Boolean Chk(String txt)
        {
            return txt.All(char.IsDigit);
        }

    }
}

Int32.TryParse

「Int32.TryParse」を使用することもできます。全角は数値として判定されません。

using System;

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {

            string txt = "123";

            Console.WriteLine(Chk(txt)); // true

            txt = "012";

            Console.WriteLine(Chk(txt)); // true

            txt = "123";

            Console.WriteLine(Chk(txt)); // false


            txt = "A";

            Console.WriteLine(Chk(txt)); // false

        }

        static Boolean Chk(String txt)
        {
            int n;

            return Int32.TryParse(txt, out n);
        }

    }
}

foreach

「foreach」で1つずつ判定する方法もあります。パフォーマンス的にいえば、こちらが一番よさそうです。

using System;

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {

            string txt = "123";

            Console.WriteLine(Chk(txt)); // true

            txt = "012";

            Console.WriteLine(Chk(txt)); // true

            txt = "123";

            Console.WriteLine(Chk(txt)); // false


            txt = "A";

            Console.WriteLine(Chk(txt)); // false

        }

        static Boolean Chk(String txt)
        {
            foreach (char c in txt)
            {
                if (c >= '0' && c <= '9')
                {
                    return true;
                }
            }
            return false;
        }

    }
}