許可されていないため23.450
、生成される数はと同じ23.45
ですが、数自体をテストすることはできません。
代わりに、文字列をテストする必要があります。
decimal val = 0m;
isvalid = isvalid &&
Regex(@"^\d+(\.\d{1,2})?$").IsMatch(mystring) &&
decimal.TryParse(mystring, out val);
私は初期化のアプローチを取っているval
ので、到達しない問題は発生せず、現在trueTryParse
の場合にのみテストを実行します。ただし、isvalid
一部の操作がすでにfalseの場合、操作全体が続行を拒否すると想定します。他の理由。もちろん、バリエーションも可能です。
の前に許可される文字数も制限している場合は、ではなく.
を使用できますが、データ型に対して大きすぎる数の場合を処理するため、そのままにしておきます。Parse
TryParse
decimal
編集:
私が使用した正規表現をさらに詳しく見る価値があります。
^
文字列の先頭に
\d+
一致する1つ以上の数字
.
に一致する.
\d{1,2}
1つまたは2つ
の数字に(\.\d{1,2})?
一致する一致する.
後に1つまたは2つの数字が一致するか、空の文字列
$
が文字列の終わりに一致する
つまり、^\d+(\.\d{1,2})?$
文字列全体が1桁以上、または1桁以上の.
後に1桁または2桁が続く必要があることを意味します。