由于23.450不允许,尽管产生的数字与 with 相同23.45,但您无法测试数字本身。
相反,您必须测试字符串:
decimal val = 0m;
isvalid = isvalid &&
Regex(@"^\d+(\.\d{1,2})?$").IsMatch(mystring) &&
decimal.TryParse(mystring, out val);
我采取了初始化的方法val,所以它不会导致TryParse未达到的问题,并且仅在isvalid当前为真时才进行测试,假设如果它已经为假,则整个操作将拒绝继续其他原因。变体当然是可能的。
如果您还在 之前限制允许的字符数.,那么您可以使用Parse而不是TryParse,但我留下了它,因为它仍然处理对于数据类型来说太大的数字的情况decimal。
编辑:
值得看看我更详细地使用的正则表达式。
^匹配字符串开头
\d+匹配一位或多位数字
.匹配 a.
\d{1,2}匹配一位或两位数字
(\.\d{1,2})?匹配 a.后跟一位或两位数字,或者空字符串
$匹配字符串结尾
所以合在一起,^\d+(\.\d{1,2})?$意味着整个字符串必须是一个或多个数字,或者一个或多个数字后跟.一个或两个数字。