C# 大于零的十进制验证
我尝试了下面的正则表达式来验证应该大于零的小数C# 大于零的十进制验证,c#,asp.net,regex,C#,Asp.net,Regex,我尝试了下面的正则表达式来验证应该大于零的小数 @“^-?(?!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 使用正则表达式很难做到这一点,但使用转换函数非常简单且更清晰: decimal d; if (decimal.TryPar
@“^-?(?!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
使用正则表达式很难做到这一点,但使用转换函数非常简单且更清晰:
decimal d;
if (decimal.TryParse(input, out d) && d > 0.0m) {
// Valid
} else {
// Invalid
}
编辑:正则表达式是一个非常强大的字符串处理工具,应该成为每个程序员工具箱的一部分。但这并不总是正确的工具:有时你需要找到其他的工具。试试这个,我测试了几个样本,它是有效的 这对我有用
string expression=@“^(\()?[0-9]+(?>,[0-9]{3})*(?>\[0-9]{3})?(?这个正则表达式很难,因为您可能有用逗号分隔的重复组。请记住允许使用空格作为数字分隔符的区域设置,以及使用句点作为分隔符和逗号作为小数点的区域设置。+1更加清晰,并且具有区域性意识。使用CultureInfo.CurrentCulture作为TryParse的参数会更加清晰。@Joe and explicit of当然……但考虑到正则表达式的替代方案,即使是默认值也是一种改进。
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
}