关于判断用户输入的日期是否符合给定的日期格式的问题
给定的日期格式dd-mm-yyyy,比如12-03-2005,03-03-2005 假设每个月均为31天,年份范围为1000到9999.现在,要判断用户输入的一个日期是否符合上述给定的格式, 应该如何写呢? 举几个不符合的例子 99-03-2005, 12-99-2005, 12-03-0100, aa-03-2005
注意12-03-2005与 12-3-2005的区别(前者才是完全符合给定格式的)
望各位赐教 试试这个正则表达式(POSIX标准):
echo dd-mm-yyyy |egrep "(([0-2][0-9])|(3[01]))-((0[1-9])|(1[0-2]))-[1-9][0-9]{3}"
小弟初学正则表达式,班门弄斧之处请高手见谅。
当然,这个表达式也有问题,对于00-mm-yyyy的日期是匹配的。这也可以通过正则表达式解决,但是这样做下去正则表达式会难于阅读,所以我想还是用脚本解决更好。
不过Linux有点不好就是比较喜欢使用大家都看不懂的命令,所以我还是把这个写出来:
"((0[1-9])|([1-2][0-9])||(3[01]))-((0[1-9])|(1[0-2]))-[1-9][0-9]{3}" 下面这个脚本虽然复杂,可是可以帮助你一些额外的功能。例如检查日期格式是否合法,
可以检查出2月份里面多出来的30,31天。
这个算是容易看得懂的linux脚本了把? :)
check_date()
{
if [ -z "$1" ] ; then
echo "No Date"
return 1
fi
VAR1=`echo "$1" | awk -F '-' '{print $3"-"$2"-"$1}'`
if [ $? -ne 0 ] ; then
echo "Error Date"
return 1
fi
VAR2=`date -d "${VAR1}" +%F`
if [ $? -ne 0 ] ; then
echo "Error Date"
return 1
fi
if [ "${VAR1}" != "${VAR2}" ] ; then
echo "Error Date"
return 1
fi
return 0
}
页:
[1]