首页 > 解决方案 > 使用正则表达式进行asp时间跨度验证

问题描述

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

[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.netregexasp.net-mvc

解决方案


RegularExpressionAttribute调用 的ToString ()方法TimeSpan,这会产生您描述的格式(即包括秒数)。您可以只创建一个ValidationAttribute基于的自定义RegularExpressionAttribute,在@"hh\:mm"调用.ToStringTimeSpan


推荐阅读