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

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

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

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

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

【问题讨论】:

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

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


【解决方案1】:

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

if (Regex.IsMatch("value", "regPattern"))
{
   ModelState.AddModelError("FieldName", "ErrorMessage");
}

【讨论】:

    【解决方案2】:

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

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

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

    ^\\d{1,7}(?:\\.\\d{1,2})?$
    

    Regex demo


    要匹配 1 到 7 位数字:

    ^\\d{1,7}$
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    相关资源
    最近更新 更多