如果输入正确,我会尝试检查。如果看起来像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
错误在哪里?
答案 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
}