.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" } }