【发布时间】:2015-01-28 16:30:00
【问题描述】:
我查看了堆栈overflow 试图找到解决方案,但没有运气,所以我为什么要问这个问题..
我的表单上有一个字段是价格,小数类型是可选的,具体取决于他们从下拉列表中选择的内容,所以我不能使用 [Required] 属性。
提交表单时,如果他们从下拉列表中选择了一个要求用户输入邮资价格的值,那么我需要检查此字段以确保其为有效的小数,因此我有以下内容
public static bool IsValid(decimal postagePrice)
{
var regex = new Regex(@"^\d+.\d{0,2}$");
return regex.IsMatch(postagePrice);
}
但它抱怨说“参数类型小数不能分配给参数类型字符串”,我理解,我也不能使用 Decimal.TryParse,因为它需要一个字符串。
我该如何解决这个问题(我也无法将类型从十进制更改为字符串)
【问题讨论】:
-
regex.IsMatch(postagePrice.ToString());?您的正则表达式也有错误;您需要转义.字符,例如\.。此外,恕我直言,您根本不需要正则表达式。 -
在您的情况下,什么是“有效”小数?您的方法已经需要
decimal postagePrice,因此根据定义,它在通常情况下已经“有效”。 -
如果你已经有小数点了,为什么还需要验证它是否是一个字符串?
-
如果是可选的,请考虑使用foolproof
RequiredIf属性之一 -
这个万无一失,如果看起来很好,但用户可以从下拉列表中选择 2 个潜在选项,并且两个值都需要填写 posrage,在验证小数时也是如此需要允许 0.1 到 xx,xxx.xx 格式
标签: c# asp.net-mvc-5 decimal