2013-09-30 127 views
5

我用两个正则表达式在12小时和24小时格式验证时间,但在某些情况下,它是不是working.Am我做错了什么,这些正则表达式?它不工作正则表达式12小时和24小时时间格式

用于验证像10:00 AM/12 12小时格式:00 PM我已经使用正则表达式

^(([0]?[0-9]|1[0-2]):[0-5][0-9][ ][aApP][mM])|((1[3-9]|2[0-3]):[0-5][0-9])$ 

用于验证24小时格式等23:00/12:00我已经使用正则表达式

^(([0]?[0-9]|1[0-2]):[0-5][0-9])|((1[3-9]|2[0-3]):[0-5][0-9])$ 
+2

点出一些你的正则表达式不起作用的情况?你有没有试过像Expresso这样的正则表达工具来检查你的正则表达式? – Ingo

+0

正则表达式的格式取决于应用程序。你编写Perl正则表达式。这些不适用于emacs。搜索网页。您可以找到许多预构建的正则表达式,例如:http://regexlib.com/DisplayPatterns.aspx?cattabindex=4&categoryId=5&AspxAutoDetectCookieSupport=1。 – Tobias

+0

我想你可以在这里使用js而不是validation.try来看看这个演示:http://keith-wood.name/timeEntry.html –

回答

11

我不知道为什么你有一些24小时r格式在你的第一个正则表达式。在12小时格式单独可以简化为这样:

new Regex(@"^(?:0?[0-9]|1[0-2]):[0-5][0-9] [ap]m$", RegexOptions.IgnoreCase); 

而对于24小时的格式,你可以把它简化为:

new Regex(@"^(?:[01][0-9]|2[0-3]):[0-5][0-9]$"); 

或两个结合:

new Regex(@"^(?:(?:0?[0-9]|1[0-2]):[0-5][0-9] [ap]m|(?:[01][0-9]|2[0-3]):[0-5][0-9])$", RegexOptions.IgnoreCase); 
+1

+1,但是你不需要24小时正则表达式中的IgnoreCase,你可能会或可能不想让'[01]'可选。 –

+0

@TimPietzcker谢谢,那就是我的复制/粘贴行xD – Jerry

相关问题