十进制和仅正数值

时间:2019-01-22 16:58:25

标签: c# regex

我可以使用什么正则表达式来表示正数和十进制值?

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*$

5 个答案:

答案 0 :(得分:3)

您在正则表达式中缺少结尾)

^\d*\.?\d*[1-9]+\d*$)|(^[1-9]+\d*\.\d*)$

但是,我强烈建议您查看Decimal.TryParse,而不要尝试自己使用字符串格式来验证数字。

答案 1 :(得分:2)

我只是将您的模式设置为此:

\d*(?:\.\d+)?

Demo

这似乎涵盖了您所有的正十进制数用例。小数部分是可选的,这意味着该模式包含整数。涵盖十进制数字,以及仅包含十进制成分的数字。

请注意,根据所使用的特定API,您可能必须用^$锚点将模式括起来。

编辑:

如果您还需要确保不匹配空字符串,那么我们可以在上述模式中添加前瞻:

(?=.)\d*(?:\.\d+)?

Demo

答案 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*-匹配不带多余零的数字。将使01001无效
  • (\.\d+)?-可以选择使用小数部分
  • |-交替
  • 0?\.\d+-仅允许十进制数字,可以选择在它们前面加零。例如。支持0.11.11之类的数字
  • |-交替
  • 0-作为特殊情况,支持立即数零
  • )-关闭非捕获组
  • $-字符串结尾

Demo

答案 4 :(得分:0)

^\d*\.?\d+$

还将匹配0.00 .00 0.0