此皈依我建议你使用不同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,代码已更正,谢谢 –