You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本正则校验HH:MM:SS AM/PM时间格式失败求助

问题根因

你遇到的校验失败有两个明确的错误点:

  • Bash的=~正则匹配运算符使用POSIX扩展正则规则,不支持PCRE语法中的\s空白匹配符,你写的\s无法被正确识别
  • 你尝试的POSIX字符类写法有误,[[:space]]/[[:blank]]缺少末尾的闭合冒号,正确写法为[[:space:]](匹配所有空白字符,含换行、制表符)、[[:blank:]](仅匹配空格和制表符)

解决方案

你可以直接用普通空格匹配(如果你的场景中时间和AM/PM之间就是普通空格,不需要兼容其他空白字符,这是最简单的写法),也可以用正确的POSIX字符类写法,修正后的代码如下:

#!/usr/bin/env bash
#
date="$1"
time="$2"

if [[ $date =~ ^(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])$ ]]; then
   # 两种写法二选一即可:
   # 写法1:直接匹配普通空格
   if [[ $time =~ ^(0[1-9]|1[0-2]):([0-5][0-9]):([0-5][0-9]) ([AaPp][Mm])$ ]]; then
   # 写法2:兼容制表符等空白,用正确的POSIX字符类
   # if [[ $time =~ ^(0[1-9]|1[0-2]):([0-5][0-9]):([0-5][0-9])[[:blank:]]([AaPp][Mm])$ ]]; then
      echo "Input Matched!"
   else
      echo "Invalid time! Use <HH:MM:SS AM/PM> format!"
      exit 1
   fi
else
   echo "Invalid date! Use <MMDD> format!"
   exit 1
fi

相关搜索关键词

你可以用以下关键词找到同类问题的解决方案:

  • bash正则空格匹配失败
  • bash =~ 运算符不支持\s
  • POSIX正则空白字符类写法

内容的提问来源于stack exchange,提问作者Justin Paro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 00:24:03