QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1195|回复: 2

关于判断用户输入的日期是否符合给定的日期格式的问题

[复制链接]
发表于 2005-3-13 00:12:14 | 显示全部楼层 |阅读模式
给定的日期格式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的区别(前者才是完全符合给定格式的)
望各位赐教
发表于 2005-3-13 03:43:41 | 显示全部楼层
试试这个正则表达式(POSIX标准):
[code:1]echo dd-mm-yyyy |  egrep "(([0-2][0-9])|(3[01]))-((0[1-9])|(1[0-2]))-[1-9][0-9]{3}"
[/code:1]
小弟初学正则表达式,班门弄斧之处请高手见谅。
当然,这个表达式也有问题,对于00-mm-yyyy的日期是匹配的。这也可以通过正则表达式解决,但是这样做下去正则表达式会难于阅读,所以我想还是用脚本解决更好。
不过Linux有点不好就是比较喜欢使用大家都看不懂的命令,所以我还是把这个写出来:
[code:1]"((0[1-9])|([1-2][0-9])||(3[01]))-((0[1-9])|(1[0-2]))-[1-9][0-9]{3}"[/code:1]
回复

使用道具 举报

发表于 2005-3-13 09:19:06 | 显示全部楼层
下面这个脚本虽然复杂,可是可以帮助你一些额外的功能。例如检查日期格式是否合法,
可以检查出2月份里面多出来的30,31天。
这个算是容易看得懂的linux脚本了把? :)

[code:1]
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
}[/code:1]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-10-3 08:30 , Processed in 0.084311 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表