【问题标题】:ASP MVC 5 C# .NET Regex Annotation for price not workingASP MVC 5 C# .NET Regex Annotation for price 不起作用
【发布时间】:2015-12-02 01:35:54
【问题描述】:

我正在使用以下正则表达式作为价格,但它没有强制使用有效价格。

[RegularExpression(@"^\d+(\.\d{2})?$", ErrorMessage = "Invalid price.")]

它阻止了大多数非价格输入,但它允许以下形式的价格:

3.

21.

等等

为什么它允许小数但不需要两位数?如果存在小数,我的正则表达式会如何强制数字?

【问题讨论】:

标签: c# asp.net regex asp.net-mvc


【解决方案1】:

由于表达式中的量词?,它可能允许没有小数点的数字。

量词 (..) 捕获括号中的所有内容

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

()? 捕获用括号括起来的所有内容中的零个或一个。

所以'。'并且这两个数字可以出现零次或一次。

这个表达式应该可以解决问题。 因为它没有封闭也没有量词?

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

您可以使用此站点来帮助您构建正则表达式。 https://regex101.com/

【讨论】:

  • 我不确定我是否理解您的回答。我知道为什么它允许数字 without 小数 - 我在设置正则表达式时考虑到了这一点。我的问题是,为什么它允许数字 with 小数点,但小数点后没有 2 位数字?
  • 我不是在问为什么它允许没有小数点的数字。我在问为什么它允许数字 with 小数点,即使小数点后没有数字。即:它应该允许以下情况:“23”、“2”、“2.34”、“213.90”。为什么允许:“3”。和“67.”?
  • \.\d{} 在 '?' 时不被视为一个表达式应用于它。它们都是两个单独的表达式。所以这两个单独的表达式是可选的。这就是它的阅读方式。 \.? \d?两者都是可选的
  • 这两个是同一个表达式 (\.)?(\d{2})?将允许点(。)是可选的,两个数字是可选的(\.?\d{2})?将允许点(。)是可选的,两个数字是可选的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-10
  • 1970-01-01
  • 2016-12-16
  • 2016-01-28
  • 2016-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多