Bash验证日期格式

时间:2017-12-13 16:29:54

标签: bash

如果输入正确,我会尝试检查。如果看起来像YYYY-MM-DD,则输入正确。我尝试编写一个函数,但结果失败了。

function reg_exp 
{
    if [[ $1 =~ [0-9]{4}-[0-9]{2}-[0-9]{2} ]]
    then echo "true"
    else echo "false"
    fi
}

>reg_exp 2015-10-20
true

# but for the parameter "2015-10-200" the results is failed....
> reg_exp 2015-10-200
true

错误在哪里?

2 个答案:

答案 0 :(得分:3)

您只检查输入中是否存在该模式。要检查模式是否都是输入,请尝试:

function reg_exp 
{
    if [[ $1 =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]
    then echo "true"
    else echo "false"
    fi
}

^表示字符串的开头,$表示字符串的结尾。

答案 1 :(得分:1)

由于您的格式与date的格式匹配,因此您可以使用它来验证日期,而不是使用正则表达式。它将检查闰年和每月的具体天数:

check_date() {
    if date -d "$1" &>/dev/null
        then echo true
    else
         echo false
    fi
}