【问题标题】:Should not allow single zero or 0.##不应允许单个零或 0.##
【发布时间】:2013-04-24 13:18:47
【问题描述】:

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

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

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

【问题讨论】:

  • 你确定吗?我很确定你的正则表达式接受0,因为它不是以[1-9]开头的。
  • 看起来它会接受12.3,但不接受123.4
  • 如果TextBox 只接受数字,为什么不尝试将其Text 属性解析为double,然后查看它是否为>= 1
  • 这样做不是更简单吗:float.Parse(textBox1.Text) < 1
  • @VimalStan 这就是我已经说过的。此外,如果输入无法解析为浮点数,float.Parse 可能会崩溃。最好改用float.TryParse

标签: c# regex winforms


【解决方案1】:

你快到了。

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

输入必须

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

注意事项:

  1. 这也不允许3.。如果您不想这样,请将最后一个 + 替换为 *
  2. 您可以使用\d 代替[0-9]。我使用后者来与[1-9] 保持一致并保持简单。

【讨论】:

  • 或 ^[1-9]\d*\.?\d*...(顺便说一句,您可能希望允许点不带任何内容)
  • @Viv 例如,您的正则表达式不允许“5”。
  • 呃...我们在这里磨水...只需使用 myregextester.com 之类的东西并带有适当的选项并对其进行整理。很确定我的工作正常。
  • @BrianStephens 是的,它不会,只评论因为我想知道为什么 Greg 使用 \d 只是做了最后一个匹配字符组 [0-9]
【解决方案2】:

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

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

另外,这里有一个有用的测试网站regular expressions

【讨论】:

    【解决方案3】:

    我认为这样做会更简单:

    float result;
    return float.TryParse(textBox1.Text, out result) && result < 1;
    

    【讨论】:

      【解决方案4】:

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

      ^[1-9]
      

      或者如果允许尾随前缀零

      ^0*[1-9]
      

      【讨论】:

        【解决方案5】:

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

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

        这有一个额外的好处,就是接受前面带有0 的数字,比如 022。

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-12-10
            • 2011-03-16
            • 1970-01-01
            • 2014-09-08
            • 1970-01-01
            • 2010-10-25
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多