Php验证24小时时间格式
我允许用户从Php验证24小时时间格式,php,date,time,Php,Date,Time,我允许用户从00:00:00到23:00:00选择一个小时,并需要检查他们提交的格式是否正确。是否有验证24小时格式的正则表达式或php函数,例如HH:MM:SS 我找到了一些正则表达式示例,但我正在验证的24小时时间始终设置为00,以分钟和秒为单位。只有时间不同 比如说 18:00:00, 23:00:00, 01:00:00 这与包括秒在内的24小时时间相匹配 ([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] 如果你只想要00分和秒,那么 ([01]?[
00:00:00
到23:00:00
选择一个小时,并需要检查他们提交的格式是否正确。是否有验证24小时格式的正则表达式或php函数,例如HH:MM:SS
我找到了一些正则表达式示例,但我正在验证的24小时时间始终设置为00
,以分钟和秒为单位。只有时间不同
比如说
18:00:00, 23:00:00, 01:00:00
这与包括秒在内的24小时时间相匹配
([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]
如果你只想要00分和秒,那么
([01]?[0-9]|2[0-3]):00:00
试试这个
$time="23:00:00";
preg_match('#^([01]?[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?$#', $time);
这里是最后一个样品,可以随时使用
$myTime = '23:00:00';
$time = preg_match('#^([01]?[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?$#', $myTime);
if ( $time == 1 )
{
// make a error!
}
else
{
// make a error!
}
必须是正则表达式吗?您可以轻松地使用PHPs
strotime
-函数来验证日期和时间(也可以在没有日期的情况下工作)。
strotime
如果给定的时间无效,则返回false
(-1
在PHP 5.1之前)。因此,不要忘记使用=
操作数
if (strtotime("12:13") === false) { echo("Wrong Time!"); } // Echos nothing
if (strtotime("19:45") === false) { echo("Wrong Time!"); } // Echos nothing
if (strtotime("17:62") === false) { echo("Wrong Time!"); } // Echos 'Wrong Time!'
这对我很有吸引力
$time = "23:59:60";
preg_match("/^([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/", $time)
通过此函数进行检查,您可以将此函数添加到
Laravel全局辅助函数文件的CodeIgniter辅助文件中,并多次调用它
虽然选择的答案绝对不错,但我并不坚持强加格式。我的想法是,如果你能解释数据,那么格式就无关紧要了。当然,你的格式越失败,你做出的假设越多,你承担的风险也就越大。但提供确认屏幕通常会修正假设。因此,我写道:
/* Sample usage:
* echo '<ol>',
* '<li>validateTime ("13:23") = ', (validateTime ('13:23') ? 'TRUE' : 'FALSE'), '</li>', // TRUE
* '<li>validateTime ("03:23 ") = ', (validateTime ('03:23 ') ? 'TRUE' : 'FALSE'), '</li>', // TRUE
* '<li>validateTime ("03:23 Am") = ', (validateTime ('03:23 aM') ? 'TRUE' : 'FALSE'), '</li>', // TRUE
* '<li>validateTime ("03:23Am") = ', (validateTime ('03:23aM') ? 'TRUE' : 'FALSE'), '</li>', // TRUE
* '<li>validateTime ("03:23 pM") = ', (validateTime ('03:23 pM') ? 'TRUE' : 'FALSE'), '</li>', // TRUE
* '<li>validateTime ("323") = ', (validateTime ('323') ? 'TRUE' : 'FALSE'), '</li>', // TRUE
* '<li>validateTime ("058") = ', (validateTime ('058') ? 'TRUE' : 'FALSE'), '</li>', // TRUE
* '<li>validateTime ("1323pm") = ', (validateTime ('1323pm') ? 'TRUE' : 'FALSE'), '</li>', // TRUE
* '<li>validateTime ("1323am") = ', (validateTime ('1323am') ? 'TRUE' : 'FALSE'), '</li>', // TRUE - I think this one makes sense, but I'm not sure. 13th hour of the day, starting in the AM?
* '<li>validateTime ("323pm") = ', (validateTime ('323pm') ? 'TRUE' : 'FALSE'), '</li>', // TRUE
* '<li>validateTime ("3") = ', (validateTime ('3') ? 'TRUE' : 'FALSE'), '</li>', // TRUE
* '<li>validateTime ("3PM") = ', (validateTime ('3PM') ? 'TRUE' : 'FALSE'), '</li>', // TRUE
* '<li>validateTime ("13:73") = ', (validateTime ('13:73') ? 'TRUE' : 'FALSE'), '</li>', // FALSE
* '<li>validateTime ("25:23") = ', (validateTime ('25:23') ? 'TRUE' : 'FALSE'), '</li>', // FALSE
* '<li>validateTime ("Any crap") = ', (validateTime ('Any crap') ? 'TRUE' : 'FALSE'), '</li>', // FALSE
* '</ol>';
*/
function validateTime ($testTime)
{
define ('regExpPattern', '/^([01]?[0-9]|2[0-3])([:]?[0-5][0-9])?[ ]?([apAP][mM])?$/');
/* regExpPattern explanation
/^ # String must begin with.
( # Start group.
[01] # A 0 or 1.
? # Optionally.
[0-9] # 0 through 9.
| # Or.
2 # 2.
[0-3] # 0 through 3.
) # End of group. This group will match hour in a 24 hour clock.
( # New group.
[:]? # Optional colon.
[0-5][0-9] # Minutes, 00 through 59.
) # End of group.
? # Make previous group optional.
[ ]? # Optional space.
( # New group.
[apAP] # One of the following 'apAP'.
[mM] # One of the following 'mM'.
) # End of group.
? # Make previous group optional. This allows for things like 3 o'clock.
$/ # Must end with. */
return preg_match (regExpPattern, trim ($testTime));
} // function validateTime ($testDate)
/*示例用法:
*回音“,
*“validateTime(“13:23”)=”,(validateTime(“13:23”)?“TRUE”:“FALSE”),“ ”,//TRUE
*“validateTime(“03:23”)=”,(validateTime(“03:23”)?“TRUE”:“FALSE”),“ ”,//TRUE
*“validateTime(“03:23 Am”)=”,(validateTime(“03:23 Am”)?“TRUE”:“FALSE”),“ ”,//TRUE
*“validateTime(“03:23Am”)=”,(validateTime(“03:23Am”)?“TRUE”:“FALSE”),“ ”,//TRUE
*“validateTime(“03:23 pM”)=”,(validateTime(“03:23 pM”)?“TRUE”:“FALSE”),“ ”,//TRUE
*“validateTime(“323”)=”,(validateTime(“323”)?“TRUE”:“FALSE”),“ ”,//TRUE
*“validateTime(“058”)=”,(validateTime(“058”)?“TRUE”:“FALSE”),“ ”,//TRUE
*“validateTime(“1323pm”)=”,(validateTime(“1323pm”)?“TRUE”:“FALSE”),“ ”,//TRUE
*“validateTime(“1323am”)=”,(validateTime(“1323am”)?“TRUE”:“FALSE”),“ ”,//TRUE-我认为这是有意义的,但我不确定。一天中的第13个小时,从上午开始?
*“validateTime(“323pm”)=”,(validateTime(“323pm”)?“TRUE”:“FALSE”),“ ”,//TRUE
*“validateTime(“3”)=”,(validateTime(“3”)?“TRUE”:“FALSE”),“ ”,//TRUE
*“validateTime(“3PM”)=”,(validateTime(“3PM”)?“TRUE”:“FALSE”),“ ”,//TRUE
*“validateTime(“13:73”)=”,(validateTime(“13:73”)?“TRUE”:“FALSE”),“ ”,//FALSE
*“validateTime(“25:23”)=”,(validateTime(“25:23”)?“TRUE”:“FALSE”),“ ”,//FALSE
*“validateTime(“任何垃圾”)=”,(validateTime(“任何垃圾”)?“TRUE”:“FALSE”),“ ”,//FALSE
* '';
*/
函数validateTime($testTime)
{
定义('regExpPattern','/^([01]?[0-9]| 2[0-3])([:]?[0-5][0-9])?[]([apAP][mM])?$/);
/*正则表达式模式解释
/^#字符串必须以开头。
(#启动组。
[01]#0或1。
?#可选。
[0-9]#0到9。
|#或。
2 # 2.
[0-3]#0到3。
)#小组结束。该小组将在24小时制中比赛一小时。
(#新集团。
[:]?#可选冒号。
[0-5][0-9]#分钟,00到59。
)#小组结束。
?#将上一组设置为可选。
[]?#可选空间。
(#新集团。
[apAP]#以下“apAP”之一。
[mM]#以下“mM”之一。
)#小组结束。
?#将前一组设置为可选。这允许3点钟之类的时间。
$/#必须以结尾*/
返回preg_匹配(regExpPattern,trim($testTime));
}//函数validateTime($testDate)
请让我知道,如果你看到改进或错误
我应该接受其他分隔符吗。如果有人选择进入13.45呢?这应该是一个有效的时间吗?毕竟,我知道用户的意思
现在,下一步是接受用户对所有可能格式的输入,并使其对SQL友好
享受,用户可以更改他们所做的选择吗?例如,输入“25:00”或“香蕉”?SACLLEN的答案是你所要求的,但是如果你的真正问题是给用户输入00到23之间的数字,考虑使用下拉菜单。“ZUUL当然可以,他们从下拉列表中选择时间是一个真正的问题,不管UI是什么。”马修同意,只是想找出用户“挑”的方法!查看验证过程中是否存在问题!我忘了问..下面的分隔符对正则表达式2正确吗<代码>/^([01]?[0-9]| 2[0-3]):00:00$/
表示字符串的开始和结束。因此,有了这些,时间周围就不会有任何东西了。所以是的,这不仅有效,而且是正确的做法。太棒了!感谢您的善意确认:)非常有效!(救了我一天)。