0

我正在使用以下 REG-EX 验证器来验证文本框是否只接受小数点后两位数。

<asp:RegularExpressionValidator Display="Dynamic" ID="regexp" runat="server" ControlToValidate="regexptest" ValidationGroup="regexptest" ValidationExpression="^\d+(\.\d\d)?$">

但我可以在小数点后输入两个以上的值。

4

3 回答 3

6
^\d+(\.\d{2})?$ 

有效示例为 -
23、23.12 无效示例 - 23.2、23.123

编辑:

请查看以下链接以限制用户在小数点后输入两个以上的数字-

http://www.mredkj.com/tutorials/validate2.html

http://www.mredkj.com/tutorials/validate2.js

于 2013-07-02T06:50:16.180 回答
3

如果小数点分隔符是句点而不是其他字符,@ Microsoft DJ 的答案@7alhashmi 的答案应该可以正常工作。这适用于美国英语,但其他语言和语言环境使用不同的分隔符,因此对于真正国际化的解决方案,您不能依赖这种情况。这使得仅使用正则表达式很难进行正确的验证。

幸运的是,还有另一种可能性:您可以将decimal.TryParse()文化说明符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。根据您的使用场景,这可能会也可能不会被接受。

于 2013-07-02T07:40:09.030 回答
1

试试这个:

<asp:RegularExpressionValidator Display="Dynamic" ID="regexp" runat="server" 
     ControlToValidate="regexptest" ValidationGroup="regexptest" 
     ValidationExpression="^\d+(\.\d{1,2})?$">
于 2013-07-02T06:28:44.480 回答