我想知道是否有简单的方法来检查字符串是否为任何类型的值格式。意味着数字1000可以用以下任何一种方式表示:
我已尝试过double.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out n)
,但这不适用于前面带有货币符号的商品。所以我尝试double.TryParse(value NumberStyles.Any | NumberStyles.AllowCurrencySymbol, CultureInfo.InvariantCulture, out n)
,但这也无效。
基本上我想检查某个值是否可以被视为数字值。
答案 0 :(得分:1)
不变文化不使用$
作为其货币符号;它使用¤
。
挑选正确的文化进行解析非常棘手。显然,最好使用与开始时格式化值相同的文化。如果您知道使用了哪种文化,那么您很幸运:)。
默认情况下,除非指定了特定的区域性,否则将使用CurrentCulture
。可以覆盖当前区域性并基于每个线程进行设置,但它默认为主机操作系统的区域设置。在没有其他信息的情况下,CurrentCulture
是合理的第一次猜测。
我建议您||
至少两次TryParse
来电:一个用于CurrentCulture
(或者您对原始文化的最佳猜测),以及使用{{1 }}。在两者上都包含InvariantCulture
。
答案 1 :(得分:0)
您可以使用正则表达式
https://regexone.com/references/csharp
您可以使用以下代码接受您的案例
$ 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