我在验证从HTML表单传入的十进制值时遇到一些问题。我的设置是:
CurrentCulture.Name = "de-DE" (German culture)
CurrentCulture.NumberFormat.NumberGroupSeparator = "." (default for German culture)
CurrentCulture.NumberFormat.NumberDecimalSeparator = "," (default for German culture)
Form value = "11.1"
我需要验证表单值并希望验证失败,因为“11.1”不是德国文化中的有效数字,其中“。”是组分隔符,而不是小数分隔符。
但是,以下两个语句都成功,并将Form值转换为(十进制)111,这是不正确的。
decimal.TryParse("11.1", NumberStyles.Any, CultureInfo.CurrentCulture, out x)
Convert.ToDecimal("11.1", CultureInfo.CurrentCulture)
不允许使用NumberGroupSeparator(decimal.Parse(“11.1”,NumberStyles.Number ^ NumberStyles.AllowThousands)),因为我需要启用包含组分隔符的表单输入。
由于全球化涉及的所有细微之处,我也在努力避免编写自定义RegEx。
我该如何解决这个问题?是否有更严格的解析方法,有点等同于日期的DateTime.TryParseExact方法?