PHP 验证时分秒时间格式 (函数封装)

  • 原创
  • 作者:程序员三丰
  • 发布时间:2022-12-07 01:30
  • 浏览量:930
本文分享了一个验证时分秒时间格式字符串的函数。

今天工作中需要验证前端传来的时间字符串,本来以为 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
      
      验证失败: 时间格式错误
      
声明:本文为原创文章,51blog.xyz和作者拥有版权,如需转载,请注明来源于51blog.xyz并保留原文链接:https://www.51blog.xyz/article/42

文章归档

强烈推荐的PHP全栈开发后台管理系统
buildadmin logo
Thinkphp8 Vue3 Element PLus TypeScript Vite Pinia

🔥BuildAdmin是一个永久免费开源,无需授权即可商业使用,且使用了流行技术栈快速创建商业级后台管理系统。

推荐文章

热门标签

PHP ThinkPHP ThinkPHP5.1 Go Mysql Mysql5.7 Redis Linux CentOS7 Git HTML CSS CSS3 Javascript JQuery Vue LayUI VMware Uniapp 微信小程序 docker wiki Confluence7 学习笔记 uView ES6 Ant Design Pro of Vue React ThinkPHP6.0 chrome 扩展 翻译工具 Nuxt SSR 服务端渲染 scrollreveal.js ThinkPHP8.0 Mac webman 跨域CORS vscode GitHub ECharts Canvas vue3 three.js 微信支付 PHP全栈开发 Python AI 人工智能 AI辅助 工作经验 实战笔记