【问题标题】:Regex to validate price (type of decimal)正则表达式验证价格(小数类型)
【发布时间】: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


【解决方案1】:

如果您只想验证该值最多有两个小数位,您可以使用模数:

public static bool IsValid(decimal postagePrice)
{
    return postagePrice % 0.01m == 0m;
}

【讨论】:

    【解决方案2】:

    Regular expressions 处理字符串 - 就这么简单。

    因此,在使用正则表达式对其进行验证之前,您需要将小数转换为字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-11
      • 1970-01-01
      • 2015-03-19
      • 2016-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-25
      相关资源
      最近更新 更多