PHP preg_match mysql时间数据类型,格式为xxx:xx:xx


PHP preg_match mysql time datatype in the format xxx:xx:xx

正在寻找正确的preg_match(或其他解决方案),以验证mysql-time数据类型中的字符串。格式为xxx:xx:xx,介于"838:59:59"到"838:59:39"之间

还要记住,"7:53:48"、"23:59"、"145:19:59"answers"-16:24:33"都是有效输入,但"930:00:00"、128:61:61"answers"63:59"都是无效输入。

我的与正常时间的预赛相去甚远

preg_match("/([0-9]):([0-5][0-9]):([0-5][0-9])$/", $time)

但这只能正确地验证分钟和秒。有什么想法吗!?

还要注意,我知道time-mysql数据类型也接受不带冒号的值,但这已经单独处理了;)

编辑

我真的很抱歉,伙计们,误解了mysql-doc。70:59实际上是有效的输入,它将被转换为70:59:00

/^-?([0-7]?[0-9]{1,2}|8([0-2][0-9]|3[0-8]))(:[0-5][0-9]){1,2}$/D
(?<![0-9:])-?([0-9]|[0-9][0-9]|[0-7][0-9][0-9]|8[0-2][0-9]|83[0-8]):([0-5][0-9])(?::([0-5][0-9]))?(?![0-9:])

说明:

(?<!#向后看:确保我们处于时间的开始[0-9:]#。。。前面没有数字或冒号)#结束向后看-?#减号,可选(第1组(小时)[0-9]#个位数0-9|#或[0-9][0-9]#两位数00-99|#或[1-7][0-9][0-9]#三位数100-799|#或8[0-2][0-9]#三位数800-829|#或83[0-8]#三位数830-838)#结束组1:#:(第2组(分钟)[0-5][0-9]#00-59)#结束组2(?:#非捕获组:#:(#第3组(秒)[0-5][0-9]#00-59)#结束组3)?#末端组,使为可选(?!#向前看:确保我们已经到了时间的尽头[0-9:]#。。。后面没有数字或冒号)#展望未来

这实际上匹配了较大文本中的时间字符串,而不仅仅是验证它们。