今天工作中需要验证前端传来的时间字符串,本来以为 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 验证失败: 时间格式错误
-