Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将零(包括小数)与RegEx.NET匹配_.net_Regex_Zero - Fatal编程技术网

将零(包括小数)与RegEx.NET匹配

将零(包括小数)与RegEx.NET匹配,.net,regex,zero,.net,Regex,Zero,我有一个最多可接受7个字符的文本框。如果该值在小数点之前和/或之后都是零,我需要确保该值不被接受,但我无法找出模式 e、 g 000、00.000、0.0000等 允许出现0.001、0.1等情况 已尝试^[0],但这不允许使用单个零,或不允许使用组合,例如0.001 [0.]* 将匹配空白、零和小数点。不完全是你要求的,但可能会在你的情况下起作用 实际上,你可能想要匹配的东西不仅仅是零 \d*[1-9]\d*(?:\.(?:\d*[1-9]+\d*)?)?|\d+\.\d*[1-9]+\d*

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

e、 g 000、00.000、0.0000等

允许出现0.001、0.1等情况

已尝试^[0],但这不允许使用单个零,或不允许使用组合,例如0.001

[0.]*
将匹配空白、零和小数点。不完全是你要求的,但可能会在你的情况下起作用

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

\d*[1-9]\d*(?:\.(?:\d*[1-9]+\d*)?)?|\d+\.\d*[1-9]+\d*
它会将小数点前的某个数字(至少一个非零)与可选小数点和某些数字匹配。或者,一些数字,一个小数,然后是一些数字(至少一个非零)

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

  • 字符串中必须有1-9之间的数字-
    (?=.[1-9])
  • 它必须以一个或多个数字开头-
    \d+
  • 它可以选择以句点和一个或多个数字结束-
    (\。\d+)
它将匹配以下字符串:

  • 42
  • 42.42
它将与以下字符串不匹配:

  • 0
  • 0.0
  • 42.
  • .42

这方面的正则表达式相当简单:

@"^(?![0.]*$)\d*\.?\d+$"
但是,regex不应用于此操作。如果您使用的是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" />

为什么不向我们展示你失败的尝试,这样我们就可以改进它们?什么类型的.NET?ASP.NET?WinForms?您的验证需要在客户端、服务器端还是同时在客户端和服务器端进行?并且验证在客户端进行。这仍然允许零通过第一个匹配的零。这与要求的几乎相反。第二个就可以了。是的,我试过了第二个,效果很好,不过如果输入1.0之类的内容,它会引发错误。虽然那部分我会处理myself@Fake.It.Til.U.Make.It因为这就是这个答案的作用。@KendallFrey
(?=.[1-9])
应该是
(?=^[1-9]+$)
。这是错误的,就像假一样。它说,这不会匹配所有允许的情况。@JeffWalker哪个不匹配?@Fake.it.Til.U.Make.it不,这些应该匹配。我不认为1.0会匹配,它应该匹配。@KendallFrey-我误解了这个问题。我以为他是想阻止小数点后的尾随零。我会编辑的。你的C#很好,但我想你的正则表达式还是坏了。现在0.1将不匹配。@KendallFrey-Typo,抱歉。真不敢相信我漏掉了
$
。它现在起作用了;测试时间
<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" />
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.");
}