C#の正規表現で全てが数字かどうか調べる

.NET Framework 4.5で確認

全てが数字かどうかを調べるには。。「^[0-9]+$」か「^[\d]+$」を使います。

「全てが○か」のパターン

^[○]+$
の「○」のところに条件を入れれば色々な表現ができます。今回の場合は「○」に「数字のみ」を記述すればいいわけです。

0〜9の数字を表すには

[0-9]を使うなら

「^[0-9]+$」と書ける。
「[0-9]」は半角の0〜9の数字のいずれかで一致する。

\dを使うなら

「^[\d]+$」と書ける。
.NET Frameworkには「文字クラス」と呼ばれるものがあって、それを使うと検索したいパターンを少ない文字で表現できる。
10 進数字と一致するかを判定するには「\d」を使う。
全角半角の0〜9の数字のいずれかで一致する。

「文字クラス」については↓
正規表現言語 - クイック リファレンス | Microsoft Docs

以下のページに「ECMAScript 準拠の動作が指定された場合、\d は [0-9] と同じになります。」とあったのが気になる。。
正規表現での文字クラス>10 進数字: \d
正規表現での文字クラス | Microsoft Docs

試しに確認した環境だと、何も指定せずに「 \d 」を使ってみて全角半角両方一致した。環境によって全角のほうは一致しない扱いになる?

サンプルコード

var words = new List<string>()
{
    "12",// 半角数字のみ
    "12",// 全角数字のみ
    "34",// 半角と全角(全角半角を区別しない)
    "A",// アルファベット
    "あ",// ひらがな
    "一",// 漢数字
};

foreach (var w in words)
{
    // 開始文字と終了文字を-(ハイフン)でつなぐと、ユニコードで範囲を指定できる
    if (System.Text.RegularExpressions.Regex.IsMatch(w, @"^[0-9]+$"))
    {
        // 全て数字(半角)
        // "12"
    }
    
    // 「文字クラス」を使う場合
    if (System.Text.RegularExpressions.Regex.IsMatch(w, @"^[\d]+$"))
    {
        // 全て数字(半角、全角)
        // "12""12""34"
    }
}