Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 区分区域性的十进制验证_C#_.net_Validation - Fatal编程技术网

C# 区分区域性的十进制验证

C# 区分区域性的十进制验证,c#,.net,validation,C#,.net,Validation,我在验证从HTML表单传入的十进制值时遇到一些问题。我的设置是: CurrentCulture.Name = "de-DE" (German culture) CurrentCulture.NumberFormat.NumberGroupSeparator = "." (default for German culture) CurrentCulture.NumberFormat.NumberDecimalSeparator = "," (default for German culture)

我在验证从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”在德国文化中不是有效数字,“.”是组分隔符,而不是小数分隔符

但是,以下两条语句都成功,并将表单值转换为(decimal)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))不是一个选项,因为我需要启用包含组分隔符的表单输入

我还试图避免编写自定义正则表达式,因为全球化涉及到所有微妙之处


我怎样才能解决这个问题?是否有更严格的解析方法,在某种程度上等同于日期的DateTime.TryParseExact方法?

11.1
是有效的,因为
是组分隔符,即使它不是您编写数字的方式
111
。相关报道:@TimSchmelter我意识到这种行为,但我正试图找到一种解决方法。“11.1”在德语中不是一个有效的数字,我的验证应该反映出这一点。从技术上讲,它是有效的,但如果您想要这种行为,您能否检测不到
字符,然后用一个正则表达式来测试它们是否在正确的位置?@matk:那么你看到我上面链接的J.Skeet的答案了吗?因为他也提供了一种验证方法。这也可能有帮助:在我们讨论输入验证时,您需要将其提高到100%:P无论哪种方式,您都可以为e等对象添加额外的检测。