【问题标题】:Bash shell: How to check for specific date format?Bash shell:如何检查特定的日期格式?
【发布时间】:2013-05-08 00:14:19
【问题描述】:

我有一个 Bash shell 脚本,它检查 shell 变量是否包含数字:

   if ! [[ "$step" =~ ^[0-9]+$ ]]
   then
     exec >&2; echo "error: $step is Not a step number.";
     exit 1
   fi

现在我需要进行类似的检查,以查看变量是否包含所需格式的日期,即YYYY-MM-DD (例如:今天是 2013-05-13) 带有破折号。如何使用 Bash shell 中的正则表达式来完成此操作,或者我是否需要外部程序来执行此操作?

【问题讨论】:

    标签: regex bash sh


    【解决方案1】:

    正则表达式不是完成这项工作的正确工具。

    例如

    2013-02-29 (invalid date)
    2012-02-29 (valid date)
    2013-10-31 (valid date)
    2013-09-31 (invalid date)
    ...
    

    我建议将字符串传递给date -d,然后检查返回值。如果返回 0,一切都很好。如果返回 1,则日期无效。

    例如:

    kent$  date -d "2012-02-29" > /dev/null 2>&1
    kent$  echo $?
    0
    
    kent$  date -d "2013-02-29" > /dev/null 2>&1
    kent$  echo $?
    1
    

    如果您想强制格式为yyyy-mm-dd,您可以同时进行正则表达式和date 验证。正则表达式仅用于格式,日期用于日期验证。

    因为date -d 也接受像02/27/2012 这样的字符串。

    【讨论】:

      猜你喜欢
      • 2016-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多