【问题标题】:Decimal validation for greater than zero大于零的十进制验证
【发布时间】:2013-12-07 08:59:35
【问题描述】:

我尝试了以下正则表达式来验证应该大于零的小数

@"^-?(?!0(,0+)?$)\d+(,\d{1,3})?$";@"^[0-9]+\d*\.\d{3}$" 但这并没有像我预期的那样工作。当值是 0.000 时,我需要触发验证,在其余情况下它不应该。

Valid : 1,123.000
        1.000
        0.001
Invalid : 0 or 0.000

【问题讨论】:

  • 这个正则表达式很难,因为你可能有用逗号分隔的重复组。
  • 记住允许使用空格作为数字分隔符的语言环境,以及使用句点作为分隔符和逗号作为小数点的语言环境。

标签: c# asp.net regex


【解决方案1】:

使用正则表达式很难做到这一点,但使用转换函数非常容易而且更清晰

decimal d;
if (decimal.TryParse(input, out d) && d > 0.0m) {
  // Valid
} else {
  // Invalid
}

编辑:正则表达式是一个非常强大的字符串处理工具,应该成为每个程序员工具箱的一部分。但这并不总是正确的工具:有时人们需要接触其他东西。

【讨论】:

  • +1 更加清晰和具有文化意识。使用 CultureInfo.CurrentCulture 作为 TryParse 的参数会更清楚。
  • @Joe 当然是明确的NumberStyles...但是考虑到正则表达式的替代方案,即使是默认值也是一种改进。
【解决方案2】:

试试这个我测试了几个样本,它正在工作

这对我有用

string expression= @"^(\()?[0-9]+(?>,[0-9]{3})*(?>\.[0-9]{3})?(?<!^[0\.]+)$";

if (Regex.IsMatch("0.000", expression))
{
  //Failed
}

if (Regex.IsMatch("0.001", expression))
{
  //passed
}

if (Regex.IsMatch("1.023", expression))
{
  //passed
}

if (Regex.IsMatch("11,111,111.111", expression))
{
  //passed
}

【讨论】:

    猜你喜欢
    • 2013-12-07
    • 2011-01-14
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多