【问题标题】:Bash Script Time Format -- HH:MM:SS AM/PM -- Regex Check [duplicate]Bash 脚本时间格式 -- HH:MM:SS AM/PM -- 正则表达式检查 [重复]
【发布时间】:2021-10-04 03:25:49
【问题描述】:

所以,我无法通过以下代码中的时间格式检查:

#!/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
   if [[ $time =~ ^(0[1-9]|1[0-2]):([0-5][0-9]):([0-5][0-9])\s([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

我已经尝试了很多时间检查的变体,但没有任何效果。我认为问题在于空间检查。我已经尝试过“[[:space]]”和“[[:blank]]”,但没有奏效。请帮忙。

另外,我已经研究到死了。我已经尝试了很多搜索,但我一无所获。如果有人确实找到了可以解决我的问题的问题,您能告诉我您使用的搜索吗?

【问题讨论】:

  • 为什么不使用“date -d ”命令而不是编写脚本呢? date 命令可以读取多种格式的数据,例如:date -d "20/05 23:59", date -d "next tuesday", date -d "yesterday"。
  • @Saboteur,我为什么不使用“日期”?因为我没那么聪明:)。

标签: regex bash


【解决方案1】:

你需要

  • 使用[[:space:]][[:blank:]] 而不是\s
  • 在文本变量两边使用双引号。

这是工作脚本:

#!/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
   if [[ "$time" =~ ^(0[1-9]|1[0-2]):([0-5][0-9]):([0-5][0-9])[[:space:]]([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

【讨论】:

  • 非常感谢您的快速回复。
猜你喜欢
  • 2010-11-21
  • 2021-02-24
  • 1970-01-01
  • 2016-11-04
  • 1970-01-01
  • 2012-02-07
  • 2013-09-09
  • 2012-09-18
  • 1970-01-01
相关资源
最近更新 更多