これはC#でどのように正しく解析できるのかわかりませんが、カンマが繰り返し可能な3つの値に区切られていない場合は失敗したいと思います。例:1,123.23が合格するはずですが、11,23.23が失敗するはずです。しかし実際の出力は、カンマの位置が10進数の前にどこにあるかにかかわらず、tryparseは常にtrueを返すようです。decimal.tryparseでC#千区切り文字
編集:これはバグであることが判明したため、正規表現での回答が受け入れられています。ありがとうございました。
string price = "1,1,2,3.23";
decimal outputValue = 0;
var allowedStyles = (NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands);
if (Decimal.TryParse(price, allowedStyles, CultureInfo.GetCultureInfo("EN-us"), out outputValue))
{
Console.WriteLine("Pass");
}
あなたはおそらく数は、最初の正規表現との適切なフォーマットであるチェックする必要があります:あなたは番号が解析可能かどうかをチェックして、もしそうなら、それは許容できる形式になって確認することができますDecimal.TryParseでこれを行うには –
@KenTucker私は考えているndsはこの目的のために3つの繰り返し値をチェックする必要がありました。これはバグですか、1,2,3.456と1,23,45を受け付ける通貨形式ですか?千単位のセパレータとして知られているからです。 – stackdisplay
何千もの区切り文字と 'Parse'(または' Convert'などの)メソッドを含むバグがあります。入力形式が正しいことを100%確実にする唯一の方法は、手動でチェックすることです。 – varocarbas