使用RegEx .NET匹配包含小数的零

时间:2012-11-20 16:53:23

标签: .net regex zero

我有一个最多可接受7个字符的文本框。如果在小数点之前和/或之后全部为零,我需要确保该值不被接受,但我无法弄清楚模式

例如000,00.000,0.0000等。

可以允许0.001,0.1等情况

已经尝试了^ [0]但是这不允许单个零,或者不允许组合如0.001

3 个答案:

答案 0 :(得分:0)

[0.]*

将匹配空白,零和小数点。不完全是你要求的,但可能适用于你的情况。

实际上你可能想要匹配不仅仅是零的东西。

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

它将匹配十进制之前的一些数字(至少一个非零)与可选的小数和一些数字。或者,一些数字,一个小数,然后是一些数字(至少一个非零)。

答案 1 :(得分:0)

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

此正则表达式将接受符合以下条件的字符串:

  • 字符串中必须有1-9位的数字 - (?=.*[1-9])
  • 必须以一个或多个数字开头 - \d+
  • 它可以选择以句点和一个或多个数字结尾 - (\.\d+)?

它将匹配这些字符串:

  • 42
  • 42.42

它与这些字符串不匹配:

  • 0
  • 0.0
  • 42.
  • .42

See it in action here.

答案 2 :(得分:0)

这方面的正则表达式非常简单:

@"^(?![0.]*$)\d*\.?\d+$"

但是,正则表达式不适用于此。如果您正在使用ASP.NET WebForms,则应使用CompareValidator:

<asp:CompareValidator id="Compare1Validator1" runat="server" 
       ControlToValidate="TextBox1" 
       Operator="DataTypeCheck"
       Type="Double" />

<asp:CompareValidator id="Compare1Validator2" runat="server" 
       ControlToValidate="TextBox1" 
       Operator="NotEqual"
       Type="Double"
       ValueToCompare="0" />

如果您使用的是C#,请使用double.TryParse和/或字符串函数:

var str = TextBox1.Text.Trim();
var textBoxValue;

if (!double.TryParse(str, out textBoxValue)) || textBoxValue == 0)
{
    throw new Exception("Input was not a properly-formatted, nonzero number.");
}