如何使用Regex Validator限制小数点后只有两位数字

本文关键字:数字 两位 Regex 何使用 Validator 小数点 | 更新日期: 2023-09-27 18:20:44

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

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

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

如何使用Regex Validator限制小数点后只有两位数字

^'d+('.'d{2})?$ 

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

编辑:

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

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

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

@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.0012。根据您的使用情况,这可能是可接受的,也可能是不可接受的。

试试这个:

<asp:RegularExpressionValidator Display="Dynamic" ID="regexp" runat="server" 
     ControlToValidate="regexptest" ValidationGroup="regexptest" 
     ValidationExpression="^'d+('.'d{1,2})?$">