此皈依我建議你使用不同Regex
用於驗證和像這樣的自定義解析方法:
public static decimal DecimalParse(string number)
{
if (new Regex(@"^\d+$").IsMatch(number))
{
return decimal.Parse(number, CultureInfo.InvariantCulture);
}
if (new Regex(@"^(\d{0,3}(,\d{3})*(\.\d+)?)$").IsMatch(number))
{
return decimal.Parse(number, CultureInfo.InvariantCulture);
}
return new Regex(@"^(\d{0,3}(\.\d{3})*(,\d+)?)$").IsMatch(number)
? decimal.Parse(number.Replace(".", "").Replace(",", "."), CultureInfo.InvariantCulture)
: 0;
}
結果將是:
string num;
num = "1,000"; Console.WriteLine("{0}", DecimalParse(num)); //1000
num = ",01"; Console.WriteLine("{0}", DecimalParse(num)); //0.01
num = ".02"; Console.WriteLine("{0}", DecimalParse(num)); //0.02
num = "12,1"; Console.WriteLine("{0}", DecimalParse(num)); //12.1
num = "12.1"; Console.WriteLine("{0}", DecimalParse(num)); //12.1
num = "1.000,12"; Console.WriteLine("{0}", DecimalParse(num)); //1000.12
num = "1.000.000,12"; Console.WriteLine("{0}", DecimalParse(num)); //1000000.12
num = "1,000.12"; Console.WriteLine("{0}", DecimalParse(num)); //1000.12
num = "1,000,000.12"; Console.WriteLine("{0}", DecimalParse(num)); //1000000.12
num = "1000"; Console.WriteLine("{0}", DecimalParse(num)); //0
num = "110."; Console.WriteLine("{0}", DecimalParse(num)); //0
num = "110,"; Console.WriteLine("{0}", DecimalParse(num)); //0
num = "1.2.3"; Console.WriteLine("{0}", DecimalParse(num)); //0
num = "1,2,3"; Console.WriteLine("{0}", DecimalParse(num)); //0
據我可以告訴你沒有在代碼中的任何地方使用'style' – user9993
你必須知道源格式提供者,否則這是一個不可能完成的任務。正如你自己所認識的那樣,兩者在特殊情況下(文化)都是有效的。 –
@ user9993,代碼已更正,謝謝 –