C#检查字符串是否为值格式

时间:2017-09-22 22:19:59

标签: c# parsing string-formatting cultureinfo

我想知道是否有简单的方法来检查字符串是否为任何类型的值格式。意味着数字1000可以用以下任何一种方式表示:

  • 1000
  • 1000.00
  • 1000
  • 1,000.00
  • $ 1,000.00

我已尝试过double.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out n),但这不适用于前面带有货币符号的商品。所以我尝试double.TryParse(value NumberStyles.Any | NumberStyles.AllowCurrencySymbol, CultureInfo.InvariantCulture, out n),但这也无效。

基本上我想检查某个值是否可以被视为数字值。

2 个答案:

答案 0 :(得分:1)

不变文化不使用$作为其货币符号;它使用¤

挑选正确的文化进行解析非常棘手。显然,最好使用与开始时格式化值相同的文化。如果您知道使用了哪种文化,那么您很幸运:)。

默认情况下,除非指定了特定的区域性,否则将使用CurrentCulture。可以覆盖当前区域性并基于每个线程进行设置,但它默认为主机操作系统的区域设置。在没有其他信息的情况下,CurrentCulture是合理的第一次猜测。

我建议您||至少两次TryParse来电:一个用于CurrentCulture(或者您对原始文化的最佳猜测),以及使用{{1 }}。在两者上都包含InvariantCulture

答案 1 :(得分:0)

您可以使用正则表达式

https://regexone.com/references/csharp

您可以使用以下代码接受您的案例

  • 1000
  • 1000.00
  • 1000
  • 1,000.00
  • $ 1,000.00

    string pattern = @"^\$?(\d{1,3}(\,\d{3})*(\.0{2})?)|(\d+(\.0{2})?)$";
    Match result = Regex.Match("$100,000.00", pattern);
    if (result.Success) 
      // your input is in format