ThinkPHP自定义验证日期格式的数据

在项目中经常会使用到日期这个字段,而ThinkPHP3.2之前没有提供验证日期的方法,因此需要我们自定义一个函数来进行验证。

先来图看看验证规则怎么写:

接着就是具体的验证方法:

规则和验证方法都有了,下面就上代码了:
验证规则:

protected $_validate = array(
        array('card_no', 'require', '卡号不能为空', self::MUST_VALIDATE, 'regex', self::MODEL_BOTH),
        array('start_date','checkDateFormat','开始日期格式错误', self::MUST_VALIDATE, 'callback', self::MODEL_BOTH),
        array('end_date','checkDateFormat','结束日期格式错误', self::MUST_VALIDATE, 'callback', self::MODEL_BOTH),
        array('group_id', 'require', '优惠券组不能为空', self::MUST_VALIDATE, 'regex', self::MODEL_BOTH),
    );

在验证规则中,我使用了回调方法的方式进行验证的,当然也可以使用函数来进行验证,如果喜欢使用函数来进行验证的话,先将这个方法放到公共的函数库中,然后在将上面的callback替换为function就可以了。

接下来就是自定义验证方法的代码:

    /**
     * 自动验证日期格式
     * @param $date
     * @return bool
     */
    protected function checkDateFormat( $date )
    {
        // 首先是验证日期的一般格式
        if (preg_match("/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/", $date, $parts)) {
            if (checkdate( $parts[2], $parts[3], $parts[1])) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

这里首先使用了正则表达式来验证日期的一般格式,即只要是“0000-00-00”这样格式的日期,都能通过正则表达式的验证(有关这个正则验证函数,可以参考PHP手册来查看,现在我来解释一下这个函数,它要表达的意思是:在$date这个变量中匹配出最开始是4个数字-2个数字-2个数字,这样的格式,如果存在的话,就把对应的数据放到$parts这个数组中),但是这并不是我们想要的,我们还需要验证这些匹配到的格式是否符合我们生活中正常的日期格式,因此就需要用到下面的这个函数。

checkdate()函数是用来验证一些日期是否是有效的格利高里日期,它的参数是分别是:月,日,年,因此,在上面我们匹配到的日期格式中,需要将对应的月日年传入到这个函数中进行判断,它的返回值是布尔值,即结果为true或false,那么我们就可以根据判断的结果来确定传入的是否是正常的日期格式的数据,此函数的我们可以参考PHP手册

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 2,125评论 0 4
  • 初衷:看了很多视频、文章,最后却通通忘记了,别人的知识依旧是别人的,自己却什么都没获得。此系列文章旨在加深自己的印...
    DCbryant阅读 2,841评论 0 19
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 123,409评论 18 134
  • 1-1苏简·一直在路上 窗外的天空,冰冷冷的下着嘈杂不安的雨。那洒墨的浓云,不动声色的潜入这座城市。然后。是那安静...
    程子寒阅读 95评论 7 1
  • 有了爱情,原来杀人也可以很简单。什么天才,也可以变得很小白。你孤独,你冷静,你睿智。可是,当你面对着她,你还是傻傻...
    boooo阅读 103评论 0 0
  • 我吻微风 流云爬上了额头 看,看 两朵桃红
    当代诗人云烟阅读 94评论 4 4
  • 还有十几天就到春节了,现在还在工作的你,是在疯狂抢票,还是已经心思思地想回家呢?作为中国人,这是一年中最重要的节日...
    微笑的秧秧阅读 629评论 15 13