Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP MVC 5 C#.NET正则表达式对价格无效的注释_C#_Asp.net_Regex_Asp.net Mvc - Fatal编程技术网

ASP MVC 5 C#.NET正则表达式对价格无效的注释

ASP MVC 5 C#.NET正则表达式对价格无效的注释,c#,asp.net,regex,asp.net-mvc,C#,Asp.net,Regex,Asp.net Mvc,我使用下面的正则表达式来计算价格,但它没有强制执行有效的价格 [RegularExpression(@"^\d+(\.\d{2})?$", ErrorMessage = "Invalid price.")] 它阻止了大多数非价格输入,但允许以下形式的价格: 三, 二十一, 等等 为什么它允许十进制,但不需要两位数?如果存在小数点,我的正则表达式会是什么样子来强制数字?它可能允许数字没有小数点,因为表达式中的量词? 量词(…)捕获包含在括号中的所有内容 量词?表示“零或前面的一个” ()?捕获p

我使用下面的正则表达式来计算价格,但它没有强制执行有效的价格

[RegularExpression(@"^\d+(\.\d{2})?$", ErrorMessage = "Invalid price.")]
它阻止了大多数非价格输入,但允许以下形式的价格:

三,

二十一,

等等


为什么它允许十进制,但不需要两位数?如果存在小数点,我的正则表达式会是什么样子来强制数字?

它可能允许数字没有小数点,因为表达式中的量词

量词
(…)
捕获包含在括号中的所有内容

量词
表示“零或前面的一个”

()?
捕获parens中包含的任何内容中的零个或一个

所以“.”和两个数字可以显示为零或一次

这个表达式应该可以解决这个问题。 因为它不是封闭的并且没有量词

^\d+(.\d{2})或^\d+。\d{2}$

您可以使用此网站帮助您构建正则表达式。

这可能有助于您的正则表达式绝对有效,也许您的验证过程中还发生了其他事情。也就是说:
newregex(@“^\d+(\.\d{2})?$”).IsMatch(“21”)
返回false。要回显@Rob,Regex本身工作正常。。。我不确定我是否理解你的答案。我知道为什么它允许数字不带小数-我在设置正则表达式时就考虑到了这一点。我的问题是,为什么它允许有小数点的数字,但没有小数点后的2位数字?我不是在问为什么它允许没有小数点的数字。我在问为什么它允许有小数点的数字,即使小数点后没有数字。即:应允许以下情况:“23”、“2”、“2.34”、“213.90”。为什么它允许“3.”和“67.”?\。\d{}在应用于它时不被视为一个表达式。它们都是两种不同的表达方式。因此,这两个单独的表达式是可选的。这就是它的解读方式。\\D这两个都是可选的这两个是相同的表达式(\)?(\d{2})?是否允许点(.)是可选的,两位数字是可选的(\.?\d{2})?允许点(.)可选,两位数字可选