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

C# Check if string is in a value format

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

我试过 double.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out n) 但这不适用于前面带有货币符号的项目。所以我尝试了 double.TryParse(value NumberStyles.Any | NumberStyles.AllowCurrencySymbol, CultureInfo.InvariantCulture, out n) 但这也不起作用。

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

您可以使用正则表达式

https://regexone.com/references/csharp

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

  • 1000
  • 1000.00
  • 1,000
  • 1,000.00
  • 1,000.00 美元

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

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

选择正确的区域性进行解析很棘手。显然,最好使用与开始格式化值相同的区域性。如果您知道 使用了哪种文化,那您就走运了:)。

默认情况下,除非指定特定区域性,否则将使用 CurrentCulture。当前文化可以在每个线程的基础上被覆盖和设置,但它默认为主机操作系统的区域设置。在没有其他信息的情况下,CurrentCulture 是一个合理的初步猜测。

我建议您 || 一起至少进行两次 TryParse 调用:一次调用 CurrentCulture(或者您对起源文化的最佳猜测),然后使用 InvariantCulture。两者都包含 AllowCurrencySymbol