正则1种: ([0-1]?[0-9]|2[0-9]):([0-5][0-9]):([0-5][0-9]) 可以匹配 23:59:59, 可是当 数据为34:59:59 却也一样的能通过。(不够完善)
正则2种: 测试 暂是通过 能比较完美的匹配时间的正则:([0-1][0-9]|2[0-3]|^[0-9]):([0-5]?[0-9]):([0-5]?[0-9]) 当情况为3:4:7这样的时间格式也能通过,且分别得到时 分 秒
下面为 2种 做下解释:
([0-1][0-9]|2[0-3]|^[0-9]):([0-5]?[0-9]):([0-5]?[0-9]) 为什么能匹配3:4:7 是因为([0-5]?[0-9])之间的?
当?字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。 现在?跟在[0-5] ,所以是非贪婪的 那么他可以匹配0 也可以不匹配0.这个就根据自己的需求。 所以你只要把?去掉分秒就必须匹配09不会出现匹配9这种情况了. /^([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/ 前面这个[0-1][0-9]|2[0-3] 是用来匹配01-09 11-19 20-23的字符串。
JS 代码实现: 1.//日期格式为:YYYY|MM|DD|hh|ss. 例如:2010|04|09|12|25 {0:yyyy-MM-dd HH:ss}
2. var pattern = /^(?:20\d{2})\|(?:0[1-9]|1[0-2])\|(?:0[1-9]|[12][0-9]|3[01])\|(?:0[0-9]|1[0-9]|2[0-3])\|(?:[0-5]\d)$/;
分钟转换小时:例如 new TimeSpan(0,Convert.ToInt32(Eval("数据源(分钟数)")),0).TotalHours.ToString("F2")