今天工作中需要验证前端传来的时间字符串,本来以为 ThinkPHP6 提供的验证器很强大了,但很不幸,它只是提供了对日期的验证,对字符串的验证不支持。(也许是我粗心没找到,如果哪位好心的同学有找到,麻烦在留言区分享一下,先谢了~_~)
开门见山,直接上代码:
/**
* 验证时间字符串格式,支持自定义格式(正则)
*
* @param string $timeStr 时间字符串,可选值:10:36,5:23
* @param int $timeFormatType 验证类型,可选值:0-时分,1-时分秒
*
* @return array
* @throws Exception
*/
function time_format_validate (string $timeStr, int $timeFormatType = 0): array
{
if ($timeFormatType === 0) {
$timePattern = '/^\d{1,2}:\d{1,2}$/';
} else {
$timePattern = '/^\d{1,2}:\d{1,2}:\d{1,2}$/';
}
if (!preg_match($timePattern, $timeStr)) {
throw new Exception('时间格式错误');
}
$arr = array_map('intval', explode(':', $timeStr));
if ($timeFormatType === 0) {
list($hour, $minute) = $arr;
} else {
list($hour, $minute, $seconds) = $arr;
}
if ($hour < 0 || $hour > 23) {
throw new Exception('小时只允许0~23');
}
if ($minute < 0 || $minute > 59) {
throw new Exception('分钟只允许0~59');
}
if (isset($seconds) && ($seconds < 0 || $seconds > 59)) {
throw new Exception('秒数只允许0~59');
}
return $arr;
}
下面介绍使用方法:
验证时分秒
正例
try {
list($hour, $minute, $seconds) = time_format_validate('20:25:03', 1);
print_r("验证通过:{$hour} 时,{$minute} 分,{$seconds}秒 \n");
} catch (\Exception $e) {
print_r('验证失败: ' . $e->getMessage());
}
运行结果:
PS F:\php-test> php .\validate_time_format.php
验证通过:20 时,25 分,3秒
反例
try {
list($hour, $minute, $seconds) = time_format_validate('20:25:63', 1);
print_r("\n验证通过:{$hour} 时,{$minute} 分,{$seconds}秒 \n");
} catch (\Exception $e) {
print_r("\n验证失败: {$e->getMessage()}\n\n");
}
运行结果:
PS F:\php-test> php .\validate_time_format.php
验证失败: 秒数只允许0~59
验证时分
正例
try {
list($hour, $minute, $seconds) = time_format_validate('20:25');
print_r("验证通过:{$hour} 时,{$minute} 分,{$seconds}秒 \n");
} catch (\Exception $e) {
print_r('验证失败: ' . $e->getMessage());
}
运行结果:
PS F:\php-test> php .\validate_time_format.php
验证通过:20 时,25 分
反例
try {
list($hour, $minute, $seconds) = time_format_validate('20:25:03');
print_r("\n验证通过:{$hour} 时,{$minute} 分,{$seconds}秒 \n");
} catch (\Exception $e) {
print_r("\n验证失败: {$e->getMessage()}\n\n");
}
运行结果:
PS F:\php-test> php .\validate_time_format.php
验证失败: 时间格式错误
🔥BuildAdmin是一个永久免费开源,无需授权即可商业使用,且使用了流行技术栈快速创建商业级后台管理系统。