【问题标题】:asp timespan validation with regular expression使用正则表达式进行asp时间跨度验证
【发布时间】:2019-09-01 19:51:15
【问题描述】:

在我的一个模型中,我使用了以下属性:

[Required(ErrorMessage = "Please enter the duration of the service")]
[RegularExpression(@"^(0[0-9]|1[0-9]|2[0-3]|[0-9]):[0-5][0-9]$", ErrorMessage = "Use format HH:MM only")]
public TimeSpan Duration { get; set; }

我使用这个正则表达式来确保持续时间的格式为 HH:mm。

每次我尝试以该格式插入值时,都会收到错误消息“仅使用格式 HH:MM”。删除正则表达式注释后,我成功保存了 HH:MM(格式字符串,但我意识到它以另一种格式保存(HH:MM:SS)。我尝试将正则表达式更改为以下注释:

[RegularExpression(@"^(0[0-9]|1[0-9]|2[0-3]|[0-9]):[0-5][0-9]$", ErrorMessage = "Use format HH:MM:SS only")]

现在我可以以这种格式保存持续时间。似乎当我尝试保存 HH:MM 格式时,它会自动转换为 HH:MM:SS,这就是它在注释检查中失败的原因。

我该如何处理这个问题?我不想输入某些流程的秒数,只输入小时和分钟。

【问题讨论】:

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


    【解决方案1】:

    RegularExpressionAttribute 调用了TimeSpanToString() 方法,这会导致您描述的格式(即包括秒)。您可以根据RegularExpressionAttribute 创建一个自定义的ValidationAttribute,其中在TimeSpan 上调用ToString 时包含@"hh\:mm" 格式。

    【讨论】:

    • 感谢您的建议,但我使用了其他解决方案
    【解决方案2】:

    我使用以下注释来解决问题:

        [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:hh\\:mm}")]
        [RegularExpression(@"((([0-1][0-9])|(2[0-3]))(:[0-5][0-9])(:[0-5][0-9])?)", ErrorMessage = "Time must be between 00:00 to 23:59")]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-18
      • 2014-12-25
      • 2014-04-21
      • 2020-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多