由于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})?$
意味着整个字符串必须是一个或多个数字,或者一个或多个数字后跟.
一个或两个数字。