大于零的十进制数验证

3
我尝试了以下用于验证小数是否大于零的正则表达式:@"^-?(?!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

这个正则表达式很难,因为可能有由逗号分隔的重复组。 - Szymon
请记得考虑到使用空格作为数字分隔符和使用句点作为分隔符、逗号作为小数点的本地化。 - Richard
2个回答

5

使用正则表达式很难完成这个任务,但使用转换函数就非常容易而且更加清晰易懂

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

编辑:正则表达式是一种非常强大的字符串处理工具,应该成为每个程序员工具箱中的一部分。但并不总是适用于所有情况:有时需要使用其他工具。


+1 更清晰和注重文化。通过将 CultureInfo.CurrentCulture 作为 TryParse 的参数使用,会更加清晰。 - Joe
@Joe 显式 NumberStyles 当然也可以...但是考虑到正则表达式的替代方案,即使使用默认值也会有所改善。 - Richard

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
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接