如何在 Asp.Net MVC 中将正则表达式分解为多个正则表达式?

Posted

技术标签:

【中文标题】如何在 Asp.Net MVC 中将正则表达式分解为多个正则表达式?【英文标题】:How to break a Regex to multiple regex in Asp.Net MVC? 【发布时间】:2020-07-25 01:50:07 【问题描述】:

我有一个字段,我为它添加了一个正则表达式。所以这个正则表达式不允许小数点前超过 7 位和小数点后超过 2 位。这工作正常,它会正确给出错误消息。现在我想在小数点前和小数点后给出不同的 2 消息。如果用户输入的数值超过 7 位,则错误消息将出现在“最多允许 7 位”字段下方。如果用户输入的十进制值超过 2 位,则错误消息将出现在“最多允许 2 位小数”字段下方。

[RegularExpression("^\\d0,7(\\.\\d0,2)?$", ErrorMessage = "Please enter Comment in the right format.")]
public decimal? decimalField  get; set; 

编辑: 我们可以做一些类似的事情吗? https://***.com/a/4803634/13211840

如果在 MVC 中不可能,那么如何使用 javascript 或 jquery?

【问题讨论】:

单一属性是不可能的,你需要为此编写自己的 JavaScript 代码。 @MichałTurczyn 我们可以将正则表达式分成两个正则表达式吗? 【参考方案1】:

我认为通过数据注释是不可能的。一种方法可能是,您明确地验证您的模型并根据您的操作中的正则表达式条件自定义错误消息。

if (Regex.IsMatch("value", "regPattern"))

   ModelState.AddModelError("FieldName", "ErrorMessage");

【讨论】:

【参考方案2】:

在您当前的模式 ^\\d0,7(\.\\d0,2)?$ 中,所有部分都是可选的,并且还将匹配 empty string or a single dot,因为小数部分接受 0 到 2 位数字。

如果您想对 2 条不同的消息使用 2 种模式,您可以匹配允许小数点前 1-7 位和点后 1-2 位的模式。

如果您想允许前导点不带数字,您可以改用\\d0,7

^\\d1,7(?:\\.\\d1,2)?$

Regex demo


要匹配 1 到 7 位数字:

^\\d1,7$

【讨论】:

也许这个页面会有所帮助***.com/questions/30392997/…

以上是关于如何在 Asp.Net MVC 中将正则表达式分解为多个正则表达式?的主要内容,如果未能解决你的问题,请参考以下文章

Asp .NET MVC 正则表达式

正则表达式问题(在 asp.net MVC5 中)

有效的 RegEx 不适用于 ASP.Net MVC 正则表达式属性

ASP.NET MVC 正则表达式属性不适用于括号(文字)

asp.net mvc 路由约束正则表达式

如何在 ASP.NET MVC 应用程序中将图像上传到 cloudinary?