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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西涯三锋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值