我想知道是否有简单的方法可以检查字符串是否具有任何形式的值格式。这意味着数字可以通过以下任何方式表示:
- 1000
- 1000.00
- 1,000
- 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)
,但这也无法正常工作。
基本上我想检查一个值是否可以被视为一个数字值。
不变文化不使用 $
作为其货币符号;它使用¤
。
选择正确的文化进行解析是棘手的。显然,最好使用与开始的价值相同的文化。如果您知道使用了哪种文化,那么您很幸运:)
默认情况下,除非指定特定的文化,否则将使用CurrentCulture
。当前的文化可以被覆盖并以每线程为基础,但默认为主机操作系统的语言环境设置。在没有其他信息的情况下,CurrentCulture
是一个合理的第一个猜测。
我建议您将||
在一起至少两个TryParse
调用:一个用于CurrentCulture
(或您对原产地文化的最佳猜测),使用InvariantCulture
的后备。在这两个上都包括AllowCurrencySymbol
。
您可以使用正则表达式
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("$100,000.00", pattern); if (result.Success) // your input is in format