0

如何在数字(十进制可能低于)文本框中限制单个零?文本框可以接受任何数字,但不应只接受零或“0.##”作为值。

例如:“900.55”、“200.00”有效,“0”、“0.105”无效。

我试过^[1-9]\d\.?\d[0-9]*但它接受“0”和“0.##”

4

6 回答 6

6

您快到了。

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

输入必须

  • 以数字 1-9 开头
  • 后跟 0-9 的任意序列
  • 和可选的:
    • 一个点后跟一个或多个 0-9。

笔记:

  1. 这也不允许3.。如果您不希望这样,请将最后一个替换+*.
  2. 您可以使用\d而不是[0-9]. 我使用后者来保持一致[1-9]并保持简单。
于 2013-04-24T13:22:52.357 回答
1

我认为这样做会更简单:

float result;
return float.TryParse(textBox1.Text, out result) && result < 1;
于 2013-04-24T13:37:48.030 回答
1

我认为你很接近,但在一个组中包含小数和后面的数字可能更容易,并使整个组只允许一次像这样:

^[1-9][0-9]*(\.\d*)?

此外,这里是一个测试正则表达式的有用站点。

于 2013-04-24T13:30:44.773 回答
0

如果文本框只接受有效数字,而您只想断言它 > 0。那么您真正需要的是

^[1-9]

或者如果允许尾随前缀零

^0*[1-9]
于 2013-04-24T14:05:10.163 回答
0

我遇到了同样的情况并解决了这个问题。试试看。

@"[^0]*[0-9].\d{2}$

于 2013-10-30T05:24:23.123 回答
0

您也可以使用否定的前瞻来编写它:

^(?!0\b)\d+(\.\d*)?$

这有一个额外的好处,就是接受前面带有0022 之类的数字。

于 2013-04-24T14:31:22.263 回答