Date日期校验器

代码:

<?php
require_once 'Zend/Validate/Date.php';
function c_date($date){$validator = new Zend_Validate_Date();if($validator->isValid($date)){echo "输入的日期格式:";echo $date."有效!<p>";}else{echo "输入的日期格式:";echo $date."无效!<p>";}
}
$date1 = "2008-02-15";
$date2 = "2008-02-31";
$date3 = "02-15-2008";
c_date($date1);
c_date($date2);
c_date($date3);

结果:

输入的日期格式:2008-02-15有效!

输入的日期格式:2008-02-31无效!

输入的日期格式:02-15-2008无效!

点评:源码解析

public function isValid($value){if (!is_string($value) && !is_int($value) && !is_float($value) &&!is_array($value) && !($value instanceof Zend_Date)) {$this->_error(self::INVALID);return false;}$this->_setValue($value);if (($this->_format !== null) || ($this->_locale !== null) || is_array($value) ||$value instanceof Zend_Date) {require_once 'Zend/Date.php';if (!Zend_Date::isDate($value, $this->_format, $this->_locale)) {if ($this->_checkFormat($value) === false) {$this->_error(self::FALSEFORMAT);} else {$this->_error(self::INVALID_DATE);}return false;}} else {if (!preg_match('/^\d{4}-\d{2}-\d{2}$/', $value)) {$this->_format = 'yyyy-MM-dd';$this->_error(self::FALSEFORMAT);$this->_format = null;return false;}list($year, $month, $day) = sscanf($value, '%d-%d-%d');if (!checkdate($month, $day, $year)) {$this->_error(self::INVALID_DATE);return false;}}return true;}

InArray数组包含校验器

如果内容包含在数组中将返回True,否则返回False。

代码:

<?php
require_once 'Zend/Validate/InArray.php';
function c_array($n){$temp = array("北京","上海","天津","重庆");$validator = new Zend_Validate_InArray($temp);if($validator->isValid($n)){echo "指定的内容:";echo $n.",存在于指定数组中!<p>";}else{echo "指定的内容:";echo $n.",不存在于指定数组中!<p>";}
}
$city1 = "北京";
$city2 = "重庆";
$city3 = "郑州";
c_array($city1);
c_array($city2);
c_array($city3);

结果:

指定的内容:北京,存在于指定数组中!

指定的内容:重庆,存在于指定数组中!

指定的内容:郑州,不存在于指定数组中!

Regex正则匹配校验器

通过使用正则表达式,再加上合理使用本校验器,几乎可以实现所有的校验规则。

代码:

<?php
require_once "Zend/Validate.php";
function c_rege($v){$pattern = array("/ab{2,}/");if(Zend_Validate::is($v,"Regex",$pattern)){echo "<font color=\"#006600\">指定的内容:";echo $v."<p>符合定义的正规规则!</font>";echo "<p>";}else{echo "<font color=\"#ff0000\">指定的内容:";echo $v."<p>不符合定义的正规规则!</font>";echo "<p>";}
}
$temp1 = "ab";
$temp2 = "abb";
$temp3 = "abbb";
c_rege($temp1);
c_rege($temp2);
c_rege($temp3);

结果:
指定的内容:ab

不符合定义的正规规则!

指定的内容:abb

符合定义的正规规则!

指定的内容:abbb

符合定义的正规规则!

点评:

    public function __construct($pattern){if ($pattern instanceof Zend_Config) {$pattern = $pattern->toArray();}if (is_array($pattern)) {if (array_key_exists('pattern', $pattern)) {$pattern = $pattern['pattern'];} else {require_once 'Zend/Validate/Exception.php';throw new Zend_Validate_Exception("Missing option 'pattern'");}}$this->setPattern($pattern);}

构造函数初始化私有属性,

    public function isValid($value){if (!is_string($value) && !is_int($value) && !is_float($value)) {$this->_error(self::INVALID);return false;}$this->_setValue($value);$status = @preg_match($this->_pattern, $value);if (false === $status) {$this->_error(self::ERROROUS);return false;}if (!$status) {$this->_error(self::NOT_MATCH);return false;}return true;}

进行验证工作。

自定义校验器编写

继承Zend_Validate_Interface接口实现用户自定义校验器。

代码案例,功能判断指定数值是否为3的倍数。

接口代码:

<?php
/*** Zend Framework** LICENSE** This source file is subject to the new BSD license that is bundled* with this package in the file LICENSE.txt.* It is also available through the world-wide-web at this URL:* http://framework.zend.com/license/new-bsd* If you did not receive a copy of the license and are unable to* obtain it through the world-wide-web, please send an email* to license@zend.com so we can send you a copy immediately.** @category   Zend* @package    Zend_Validate* @copyright  Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)* @license    http://framework.zend.com/license/new-bsd     New BSD License* @version    $Id: Interface.php 24593 2012-01-05 20:35:02Z matthew $*//*** @category   Zend* @package    Zend_Validate* @copyright  Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)* @license    http://framework.zend.com/license/new-bsd     New BSD License*/
interface Zend_Validate_Interface
{/*** Returns true if and only if $value meets the validation requirements** If $value fails validation, then this method returns false, and* getMessages() will return an array of messages that explain why the* validation failed.** @param  mixed $value* @return boolean* @throws Zend_Validate_Exception If validation of $value is impossible*/public function isValid($value);/*** Returns an array of messages that explain why the most recent isValid()* call returned false. The array keys are validation failure message identifiers,* and the array values are the corresponding human-readable message strings.** If isValid() was never called or if the most recent isValid() call* returned true, then this method returns an empty array.** @return array*/public function getMessages();
}

要实现其中的两个方法,一个是isValid(),一个是getMessages()

实现代码:

<?php
require_once "Zend/Validate/Interface.php";
class MyValidator implements Zend_Validate_Interface{protected $_messages = array();public function isValid($value){$this->_messages = array();$requirement = !($value%3);if(!$requirement){$this->_messages[] = "'$value'不能被3整除";return false;}return true;}public function getMessages(){return $this->_messages;}
}
function c_n_3($n){$validator = new MyValidator();if($validator->isValid($n)){echo "指定的数值:";echo $n.",是3的倍数!<p>";}else{echo "指定的数值:";echo $n.",不是3的倍数!<p>";echo "失败的消息为:<p>";foreach ($validator->getMessages() as  $message) {echo "$message<p>";}}
}
$num1 = 5;
$num2 = 6;
$num3 = 8;
c_n_3($num1);
c_n_3($num2);
c_n_3($num3);

结果:

指定的数值:5,不是3的倍数!

失败的消息为:

'5'不能被3整除

指定的数值:6,是3的倍数!

指定的数值:8,不是3的倍数!

失败的消息为:

'8'不能被3整除

点评:
这里通过isValid()方法来设置属性信息,通过getMessages()方法来获取错误消息。错误消息是一个数组,通过foreach()方法来遍历读取。

转载于:https://www.cnblogs.com/jiqing9006/archive/2013/04/08/3007577.html

Zend Framework学习之常用校验器相关推荐

  1. zend framework php编码规范,Zend Framework常用校验器详解

    本文实例讲述了Zend Framework常用校验器.分享给大家供大家参考,具体如下: Date日期校验器 代码:<?php require_once 'Zend/Validate/Date.p ...

  2. 深度学习中常用优化器算法Optimizer详解(BGD、SGD、MBGD、Momentum、NAG、Adagrad、Adadelta、RMSprop、Adam)

    本文转载自:https://www.cnblogs.com/guoyaohua/p/8542554.html 在机器学习.深度学习中使用的优化算法除了常见的梯度下降,还有 Adadelta,Adagr ...

  3. Zend Framework学习之Zend_Mail

    Zend_Mail组件提供了通用化的功能来创建和发送文本. Zend_Mail通过PHP内建的mail()函数或者直接通过SMTP连接来发送邮件. 一个简单的邮件由收件人.主题.邮件内容以及发件人等内 ...

  4. Zend Framework学习(3)第一个zend应用

    .htaccess文件 .htaccess文件用来实现URL重置,即当用户访问某资源时,会将其重新定位到指定的文件下. 代码示例: RewriteEngine on RewriteRule !\.(j ...

  5. Zend Framework学习之Zend_Config

    1.从PHP数组中读取数据 使用Zend_Config_Ini(读取ini配置文件) Zend_Config_Xml(读取XML配置文件) 案例: <?php require_once(&quo ...

  6. 妈耶,讲得好详细,十分钟彻底看懂深度学习常用优化器SGD、RMSProp、Adam详解分析

    深度学习常用优化器学习总结 常用优化器 SGD RMS Prop Adam 常用优化器 SGD 基本思想:通过当前梯度和历史梯度共同调节梯度的方向和大小 我们首先根据pytorch官方文档上的这个流程 ...

  7. Zend Framework 快速开始

    翻译自learning Zend Framework的Zend Framework Quick Start .主要是为了经常熟悉熟悉常用组件的用法. Zend Framework自1.6以来,发生了很 ...

  8. PHP高级教程——Zend Framework核心开发人员力作

    <PHP高级程序设计:模式.框架与测试> -- Zend Framework核心开发人员力作 在过去的十年间, PHP 已经从一套为 Web 站点开发人员提供的简单工具转化成完整的 OOP ...

  9. Zend Framework入门教程

    转战了各个Blog平台,发现还是落户到csdn上吧,以后吐槽在新浪,发长文在csdn,整理链接在Baidu Hi 在大四的时候接下的实验室网站,网站是上三届的吴师兄写的,主要采用的是LAMP,其中PH ...

最新文章

  1. OSI第六层:表示层功能作用
  2. QML基本可视化元素--Text
  3. php读取binlog,PHP解析Mysql Binlog
  4. 爱因斯坦谜题解答(三种算法比较)
  5. Spanning Tree with Maximum Degree
  6. CSS浮动属性Float到底什么怎么回事,下面详细解释一下
  7. WSDM Cup 2020检索排序评测任务第一名经验总结
  8. 计算机人文研究生专业,西安科技大学,艺术、人文、材料、计算机、通信等专业调剂信息...
  9. 给一线讲产品·7期|用户在云上如何快速搭建安全防护体系?
  10. ../bin/testCurveFitting 出现的错误以及解决办法
  11. 电气原理图制图相关GB标准
  12. SQL进阶教程PDF下载
  13. poj 1129 Channel Allocation——四色定理
  14. kong的插件: Response Rate Limiting
  15. Java 过滤器Url通配符处理
  16. 关于如何在word中使用EndNote引用知网的文献
  17. (2)二叉树由后序(LRD)和中序(LDR)得到前序(DLR)
  18. FFmpeg三大工具--ffplay
  19. Ten 使用ssh服务管理远程主机
  20. Android 6.0 动态权限实战(一)------ Nexus7二代(WIFI版)4.4升级6.0-附带纯净刷机ROM福利!

热门文章

  1. 假如明天灾难来临_北京医保容灾
  2. mysql5.7 单机多实例_MySQL数据库 5.7.21单机多实例安装
  3. 分区起始位置参数溢出_IIS6.0缓冲区溢出漏洞深度分析(CVE-2017-7269)
  4. ArcGIS水文分析实战教程(7)细说流域提取
  5. golang解决TCP粘包问题
  6. Kubernetes支持有状态服务的部署
  7. 【java学习之路】(java框架)011.SpringMVC入门
  8. android webview 3d,Unity3d Android的web视图没有显示_webview_开发99编程知识库
  9. 2020-10-27中国大学MOOC学习进度
  10. Spring集成CXF发布WebService并在客户端调用