我可以使用什么正则表达式来表示正数和十进制值?
Accepted values: 0, 22.5 , 0.35 , 89 , .38
Invalid values : -22 , -.25 , -0.66 , abc, -22abc, 55er
我已经尝试过了,但是我得到了错误
^\d*\.?\d*[1-9]+\d*$)|(^[1-9]+\d*\.\d*$"
太多)
^\d*\.?\d*[1-9]+\d*$)|(^[1-9]+\d*\.\d*$
答案 0 :(得分:3)
您在正则表达式中缺少结尾)
。
^\d*\.?\d*[1-9]+\d*$)|(^[1-9]+\d*\.\d*)$
但是,我强烈建议您查看Decimal.TryParse
,而不要尝试自己使用字符串格式来验证数字。
答案 1 :(得分:2)
我只是将您的模式设置为此:
\d*(?:\.\d+)?
这似乎涵盖了您所有的正十进制数用例。小数部分是可选的,这意味着该模式包含整数。涵盖十进制数字,以及仅包含十进制成分的数字。
请注意,根据所使用的特定API,您可能必须用^$
锚点将模式括起来。
编辑:
如果您还需要确保不匹配空字符串,那么我们可以在上述模式中添加前瞻:
(?=.)\d*(?:\.\d+)?
答案 2 :(得分:0)
或者,如果您想远离正则表达式,可以使用以下方法之一:
private static bool IsPositiveDecimal(string decimalString)
{
return decimal.TryParse(decimalString, out var aDecimal) && aDecimal >= 0;
}
或
private static bool TryParsePositiveDecimal(string decimalString, out decimal aDecimal)
{
return decimal.TryParse(decimalString, out aDecimal) && aDecimal >= 0;
}
如果为后一个输入非正的十进制数,则它将返回false,但将在out参数中返回已解析的十进制。
这应该满足您的需求,而无需在代码中注入复杂的Regex。
答案 3 :(得分:0)
我相信此正则表达式应能满足所有情况,并且只会匹配有效样本并丢弃所有无效样本。
^(?:[1-9]\d*(\.\d+)?|0?\.\d+|0)$
正则表达式说明
^
-字符串的开头(?:
-非捕获组的开始[1-9]\d*
-匹配不带多余零的数字。将使01
或001
无效(\.\d+)?
-可以选择使用小数部分|
-交替0?\.\d+
-仅允许十进制数字,可以选择在它们前面加零。例如。支持0.11
或.11
之类的数字|
-交替0
-作为特殊情况,支持立即数零)
-关闭非捕获组$
-字符串结尾答案 4 :(得分:0)
^\d*\.?\d+$
还将匹配0.00 .00 0.0