我有一个最多接受 7 个字符的文本框。如果在小数点之前和/或之后全为零,我需要确保不接受该值,但我无法弄清楚模式
例如 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])\d+(\.\d+)?$
此正则表达式将接受满足以下条件的字符串:
(?=.*[1-9])
\d+
(\.\d+)?
它将匹配这些字符串:
42
42.42
它不会匹配这些字符串:
0
0.0
42.
.42
正则表达式相当简单:
@"^(?![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.");
}