我正在使用以下REG-EX验证器验证文本框是否只接受小数点后的两位数。
<asp:RegularExpressionValidator Display="Dynamic" ID="regexp" runat="server" ControlToValidate="regexptest" ValidationGroup="regexptest" ValidationExpression="^\d+(\.\d\d)?$">
但是我可以在小数点后输入两个以上的值。
答案 0 :(得分:6)
^\d+(\.\d{2})?$
有效的例子是 - 23,23.12
无效的例子-23.2,23.123
修改强>
请查看以下链接,以限制用户在小数点后输入两个以上的数字 -
答案 1 :(得分:3)
如果小数点分隔符是句点而不是其他字符,则@Microsoft DJ's answer或@7alhashmi's answer应该可以正常工作。这适用于美国英语,但其他语言和语言环境使用不同的分隔符,因此对于真正国际化的解决方案,您不能依赖于这种情况。这使得仅使用正则表达式进行适当的验证变得困难。
幸运的是,还有另一种可能性:您可以将decimal.TryParse()
with a culture specifier与Math.Round()
一起使用。例如,如果用户的文化是fr-FR
,那么您可以执行以下操作:
string value = "1234,56";
NumberStyles style = NumberStyles.AllowDecimalPoint;
CultureInfo culture = CultureInfo.CreateSpecificCulture("fr-FR"); // or whatever
decimal number;
if (!Decimal.TryParse(value, style, culture, out number))
{
failValidate(FailReason.CannotParse); // Could not parse as a number
}
else if (number != Math.Round(number, 2))
{
failValidate(FailReason.TooManyDecimals); // More than two decimals provided
}
else
{
succeedValidate(); // Number was valid and has at most two decimals
}
当然,这种技术在服务器端才真正有用(你应该在那里进行所有依赖的验证; 客户端验证对用户来说是一种方便,而不是依赖于用于安全性或输入验证)。
如上所述使用Math.Round()将捕获用户输入12.001
的情况,但12.000
将被接受,因为它等于12.00
或者12
{{1}} 1}}。根据您的使用情况,这可能是也可能是不可接受的。
答案 2 :(得分:1)
试试这个:
<asp:RegularExpressionValidator Display="Dynamic" ID="regexp" runat="server"
ControlToValidate="regexptest" ValidationGroup="regexptest"
ValidationExpression="^\d+(\.\d{1,2})?$">