用于验证 .NET 时间格式的正则表达式

Posted

技术标签:

【中文标题】用于验证 .NET 时间格式的正则表达式【英文标题】:A regular expression to validate .NET time format 【发布时间】:2011-10-06 04:33:46 【问题描述】:

背景

我需要验证某些字段中的用户输入,这些字段定义了如何在某些视图中显示时间。

要求

时间格式必须以 Microsoft .NET 方式表示(如果您想了解有关框架的日期和时间格式的更多信息,请查看这篇 MSDN 库文章:http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx)

请记住,我希望验证格式而不是实际时间字符串。

例如,用户可以输入:

高:毫米 hh:mm ss hh:ss mm:ss ...等等。

事实上,它应该从最短到最长的可用时间格式进行验证。

另一点是我需要在客户端使用 JavaScript 来完成。换句话说,任何给定的正则表达式都应该在浏览器 javascript 正则表达式引擎中工作。

我会感谢任何自编的、任何链接或粘贴的表达式!

提前谢谢你。

注意(更新)

我不能使用 ASP.NET 验证引擎或任何其他引擎。由于项目的要求,我需要避免这种情况。

【问题讨论】:

只是一个小小的说明,但您只想验证正确吗?输出是布尔值? 您可以发布您尝试过的内容吗?这不是来寻求问题解决方案并期望人们为您解决问题的地方。 HH:mm hh:mm hh:ss mm:ss 这些都是2digits:2digits,用正则表达式区分的可能性不大。除了时间格式 hh:ss 没有什么意义... 我假设您使用的是 asp.net?所以你可以使用 RegularExpressionValidator 控件 @bw_üezi 他说他只是想验证一种格式。即用户输入hh:mmmm:ss,它们将返回true,但如果用户输入ss:hh,它会返回false,据我所知。 【参考方案1】:

据我所知,没有太多选择 - 最多 20 个。为什么不在一个没有太多特殊符号的大正则表达式中枚举它们呢?喜欢

'hh:mm|hh:mm:ss|yyyy-MM-dd hh:mm|<etc>'

您可以区分大小写以区分月份的M 和分钟的m,小时将其设置为[hH],然后将其设置为[:-/],在那里您允许使用不同的分隔符和批次的其他类似的东西。但主要思想是简单地枚举由| 分隔的所有选项,在|| 之间只使用少量的正则表达式语法。

【讨论】:

是的,这是我解决这个问题的第一个想法,但我想知道是否有其他方法可以做到这一点。顺便说一句,这只是时间格式,我不需要日期时间格式。 @Matías Fidemraizer:如果只是时间的话,那就更容易了。我真的认为您需要将它们全部列举出来。 我相信你是对的。总比没有好,或者更多:实现这一结果的最佳方式。谢谢。【参考方案2】:

您对“有效”格式字符串的定义是什么?只有知道了这一点,才能验证格式字符串。

“K”也是一个有效的格式字符串

“zz”也是一个有效的格式字符串

“e”也是一种有效的格式(会落入“字符被原样复制到结果字符串中。”的情况)

我什至不确定什么格式实际上会导致 .NET .ToString() 抛出异常(如果这是您要避免的)。

【讨论】:

我相信这会在问题的 cmets 中得到更好的讨论。顺便说一句,请阅读它们,因为我已经向其他人回答了同样的想法。

以上是关于用于验证 .NET 时间格式的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

用于验证日期时间格式的正则表达式(MM/DD/YYYY)[重复]

用于验证邮政编码格式的 dart 正则表达式

正则表达式,用于验证不同格式的字符串,用于特殊时间转换[重复]

用于验证 Netezza DB 中数据格式的正则表达式

dd/mm/yyyy 格式的日期正则表达式,用于 javascript 验证

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