Zend Framework学习之常用校验器
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学习之常用校验器相关推荐
- zend framework php编码规范,Zend Framework常用校验器详解
本文实例讲述了Zend Framework常用校验器.分享给大家供大家参考,具体如下: Date日期校验器 代码:<?php require_once 'Zend/Validate/Date.p ...
- 深度学习中常用优化器算法Optimizer详解(BGD、SGD、MBGD、Momentum、NAG、Adagrad、Adadelta、RMSprop、Adam)
本文转载自:https://www.cnblogs.com/guoyaohua/p/8542554.html 在机器学习.深度学习中使用的优化算法除了常见的梯度下降,还有 Adadelta,Adagr ...
- Zend Framework学习之Zend_Mail
Zend_Mail组件提供了通用化的功能来创建和发送文本. Zend_Mail通过PHP内建的mail()函数或者直接通过SMTP连接来发送邮件. 一个简单的邮件由收件人.主题.邮件内容以及发件人等内 ...
- Zend Framework学习(3)第一个zend应用
.htaccess文件 .htaccess文件用来实现URL重置,即当用户访问某资源时,会将其重新定位到指定的文件下. 代码示例: RewriteEngine on RewriteRule !\.(j ...
- Zend Framework学习之Zend_Config
1.从PHP数组中读取数据 使用Zend_Config_Ini(读取ini配置文件) Zend_Config_Xml(读取XML配置文件) 案例: <?php require_once(&quo ...
- 妈耶,讲得好详细,十分钟彻底看懂深度学习常用优化器SGD、RMSProp、Adam详解分析
深度学习常用优化器学习总结 常用优化器 SGD RMS Prop Adam 常用优化器 SGD 基本思想:通过当前梯度和历史梯度共同调节梯度的方向和大小 我们首先根据pytorch官方文档上的这个流程 ...
- Zend Framework 快速开始
翻译自learning Zend Framework的Zend Framework Quick Start .主要是为了经常熟悉熟悉常用组件的用法. Zend Framework自1.6以来,发生了很 ...
- PHP高级教程——Zend Framework核心开发人员力作
<PHP高级程序设计:模式.框架与测试> -- Zend Framework核心开发人员力作 在过去的十年间, PHP 已经从一套为 Web 站点开发人员提供的简单工具转化成完整的 OOP ...
- Zend Framework入门教程
转战了各个Blog平台,发现还是落户到csdn上吧,以后吐槽在新浪,发长文在csdn,整理链接在Baidu Hi 在大四的时候接下的实验室网站,网站是上三届的吴师兄写的,主要采用的是LAMP,其中PH ...
最新文章
- OSI第六层:表示层功能作用
- QML基本可视化元素--Text
- php读取binlog,PHP解析Mysql Binlog
- 爱因斯坦谜题解答(三种算法比较)
- Spanning Tree with Maximum Degree
- CSS浮动属性Float到底什么怎么回事,下面详细解释一下
- WSDM Cup 2020检索排序评测任务第一名经验总结
- 计算机人文研究生专业,西安科技大学,艺术、人文、材料、计算机、通信等专业调剂信息...
- 给一线讲产品·7期|用户在云上如何快速搭建安全防护体系?
- ../bin/testCurveFitting 出现的错误以及解决办法
- 电气原理图制图相关GB标准
- SQL进阶教程PDF下载
- poj 1129 Channel Allocation——四色定理
- kong的插件: Response Rate Limiting
- Java 过滤器Url通配符处理
- 关于如何在word中使用EndNote引用知网的文献
- (2)二叉树由后序(LRD)和中序(LDR)得到前序(DLR)
- FFmpeg三大工具--ffplay
- Ten 使用ssh服务管理远程主机
- Android 6.0 动态权限实战(一)------ Nexus7二代(WIFI版)4.4升级6.0-附带纯净刷机ROM福利!
热门文章
- 假如明天灾难来临_北京医保容灾
- mysql5.7 单机多实例_MySQL数据库 5.7.21单机多实例安装
- 分区起始位置参数溢出_IIS6.0缓冲区溢出漏洞深度分析(CVE-2017-7269)
- ArcGIS水文分析实战教程(7)细说流域提取
- golang解决TCP粘包问题
- Kubernetes支持有状态服务的部署
- 【java学习之路】(java框架)011.SpringMVC入门
- android webview 3d,Unity3d Android的web视图没有显示_webview_开发99编程知识库
- 2020-10-27中国大学MOOC学习进度
- Spring集成CXF发布WebService并在客户端调用