转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 站长学院 >> Web开发 >> 正文
PRADO 2.0.1 使用教程专题 -- 验证控件使用教程         ★★★★

PRADO 2.0.1 使用教程专题 -- 验证控件使用教程

作者:闵涛 文章来源:闵涛的学习笔记 点击数:2820 更新时间:2009/4/23 10:40:11
美国社保号码: \d{3}-\d{2}-\d{4}

可以网上可以找到更多的正则表达式,如 http://regexlib.com/

下例所示,我们使用正则表达式验证密码字符个数。

<label>Password:</label>
<com:TTextBox ID="Password" TextMode="Password" /> <br />
<com:TRequiredFieldValidator 
        ControlToValidate="Password" 
        Display="Dynamic"
        ErrorMessage="Please choose a password with 6 or more characters." />
<com:TRegularExpressionValidator
        ControlToValidate="Password" 
        RegularExpression="[\w]{6,}" 
        Display="Dynamic"
        ErrorMessage="Your password must have at least 6 characters." />

正则表达式"[\w]{6, }" 匹配验证至少六个的非空字符。(译注:原文有误?正则表达式\w 指字母、数字和下划线组任一字符)正则表达式"[\w]" 定义了非空字符,如,你可以定义该字符为a-z任一字母 "[a-z]". 表达式 "{6, }" 检测重复的次数,在这个表达式中重复出现六次以上。例如,假定把表达式改为 "{3,6}"将检测重复出现3-6次之范围内。可以通过www.google.com通过搜索“regular expression”在网上找到更多的正则表达式。


TCompareValidator

TCompareValidator验证控件用于两个输入控件的数值,或输入控件和特定常量的数值的比较。

范例中,有两个密码输入框,“password”和“password again”.第二个密码输入框用于确保用户密码输入的正确性。通过比较两个密码输入值进行验证,当两个数值相同,验证有效。TCompareValidator 控件可以通过多种方式进行比较比较两个输入控件,下面将详细说明。以下是TcompareValidator在其父类[#tvalidator TValidator].的基础上增加的属性。

ControlToCompare
对比验证输入控件的Id。
ValueToCompare
和用户输入控件值进行验证比较的常量。
ValueType
在进行比较验证前进行转化的数据类型(整型,浮点型,货币型,日期型,字符型)。
Operator
执行验证比较的操作(等于,不等于,大于,大于等于,小于,小于等于,数据类型检测)。

事实上,TcompareValidator能执行多种比较验证,以下范例是简单的比较数值。

<label>Password:</label>
<com:TTextBox ID="Password" TextMode="Password" /> <br />
...
<label>Password Again:</label>
<com:TTextBox ID="PasswordCheck" TextMode="Password" /> <br />
<com:TRequiredFieldValidator 
        ControlToValidate="PasswordCheck" 
        Display="Dynamic"
        ErrorMessage="Please re-enter your password." />
<com:TCompareValidator
        ControlToValidate="PasswordCheck" 
        ControlToCompare="Password" 
        Display="Dynamic"
        ErrorMessage="Your password entries did not match." />

设置ControlToValidate属性为输入控件ID指定需要验证的控件,设置ControlToCompare属性为另外一个控件的ID来指定用于比较的输入控件。

在上例中,TCompareValidator设置为需要比较验证的PasswordCheck输入控件Id, 用Password的输入值和PasswordCheck的输入值进行比较,如果相同,验证有效。

也可以通过设置ValueToCompare属性,进行输入控件的常量比较。

ValueType属性用于指定比较数值类型,两个比较数值先被自动转化为设置的数值类型,然后执行比较操作。以下是所支持的数据类型。


整型
32字节带符号整型。
双精度型
双精度浮点数值类型。
货币型
包含货币符号的十进制数据类型。
时间型
时间类型,按GNU进行日期定义,由于strtotime 函数的bug,,当设定时间时,不包含时,分和秒。
字符型
字符类型。

使用Operator属性设定进行比较的操作类型,如等于,不等于,大于,大于等于,小于,小于等于,数据类型检测等。如设置了 DataTypeCheck,TcompareValidator控件将忽略ControlToCompare和ValueToCompare属性,仅仅显示控件的输入的值是否能转化为ValueType指定的数据类型。

注意:如果输入控件输入值为空,不会进行任何验证函数,验证返回成功。应该使用RequiredFieldValidator控件用户输入数据的非空检测。


TRangeValidator

TRangeValidator验证控件检测输入控件的值是否在指定范围内。该控件采用三个主要的属性完成验证操作。MinValue和MaxValue属性指定验证有效范围的最小值和最大值,ValueType属性指定比较的数据类型,数据的类型将在执行验证操作前转化为此类型,该属性支持的类型和TCompareValidator的ValueType是一致的。

TRangeValidator其父类验证控件[#tvalidator TValidator]的基础上增加以下属性:

MinValue
验证范围的最小值
MaxValue
验证范围的最大值
ValueType
验证前转化的数据类型 (整型, 浮点型, 货币型, 日期型, 字符型)

以下范例演示了如何在Web页面中采用TRangeValidator控件验证输入控件的输入范围:

<h3>RangeValidator Example</h3>

<com:TForm >

<label>Enter a number from 1 to 10:</label>
<com:TTextBox ID="TextBox1" />
<com:TRangeValidator 
        ControlToValidate="TextBox1"
        MinValue="1"
        MaxValue="10"
        ValueType="Integer"
        Display="Dynamic"
        ErrorMessage="The value must be from 1 to 10!" />
<br />
<com:TButton Text="Test Range Validator" />

</com:TForm>

TCustomValidator

在很多情况下,我们需要自定义验证控件,例如,我们需要验证注册用户输入的用户名的唯一性。这一过程需要把用户名和用户数据列表进行对比验证,假设用户数据存储在数据库中的。TCustomValidator控件为用户输入控件提供了自定义的验证函数。该验证过程和输入控件分离,你可以选择验证消息显示的位置。TCustomValidator在其父组件TValidator的基础上增加了以下的属性和事件:

ClientValidationFunction
用于进行客户端验证的函数名称。
OnServerValidate (event)
当服务器端执行验证时触发该事件。当验证结果失败时,事件委托设置TServerValidateEventParameter.isValid的值为flase。

提供OnServerValidate的验证处理事件,需要创建服务器端的验证函数。TServerValidateEventParameter类型的事件参数将访问被验证的输入控件的数据,结果将保存在事件参数的isValid属性中。

创建客户端的验证函数,首先,添加上文所述的服务器端验证函数;其次,添加客户端验证脚本函数到模版页面,或通过Php重载页面的onPreRender函数添加javascript函数。 该函数如下所示:

<script type="text/javascript">
<!--
        function ValidationFunctionName(sender, parameter)
        {
                //if the parameter value is true
                if(parameter == ... )
                        return true;
                else
                        return false;
        }
-->
</script>

使用ClientValidationFunction 控件的ClientValidationFunction属性指定客户端验证的脚本函数的名称。

继续以新用户注册为例,我们需要输入用户名的唯一性,在模板页面中添加以下自定义控件:

<com:TCustomValidator
        ControlToValidate="Username"
        ClientValidationFunction="checkUsernameJS"
        OnServerValidate="checkUsername"
        Display="Dynamic"
        ErrorMessage="Username exists, please try a different username." />

在这里,服务器端的验证调用 checkUsername函数(Php中执行),客户端的验证调用checkUsernameJS函数(javascript中执行)。Php代码如下,注意到javascript代码是写在php代码中的,同样的我们可以把它写到模板文件中。

/**
 * Check if the username exists.
 * @param TControl sender of the event
 * @param TServerValidateEventParameter event parameter
 */
function checkUsername($sender, $param)
{
        //assume the username can be checked against a database
        //or some other datasource. For the example, we will
        //just do a simple comparison. If the value equals "admin"
        //the validation failed.
        if($param->value == ''''admin'''')
                $param->isValid = false;
}

/**
 * Overrides parent implementation by registering a Javascript 
 * for custom validation.
 * @param TEventParameter the event parameter
 */
function onPreRender($param)
{
        parent::onPreRender($param);
        $page=$this->getPage();
        
        //javascript checkUsername, Lets assume that XMLHttpRequest 
        //can be used to check the username. For the example,
        //we will just do a simple comparison in javascript
        $jscript="
                function checkUsernameJS(sender, parameter)
                {
                        if(parameter == ''''admin'''')
                                return false;
                        else
                                return true;
                }
        ";

        $page->registerEndScript(''''checkUsername'''',$jscript);
}

注意,我们把javascript添加到php中,重载onPreRender函数,并使用$page->registerEndScript函数添加javascript。同样的,javascript将被添加到模板中。

当创建客户端验证函数时,务必也包括服务器端验证函数。如果您创建的客户端的验证函数不包括相应的服务器端函数,恶意的代码将有可能绕过验证。


TValidationSummary

TValidationSummary控件以Web页面内显示,弹出窗口或两者同时显示的方式显示所有的验证错误小结信息。该小结信息由DisplayMode属性决定以List,bulleted或single paragraph格式显示。通过分别设置 ShowSummaryShowMessageBox属性可以以Web页或者弹出框的方式显示信息。

TValidationSummary类以TwebControl为基类,它拥有以下的属性:

DisplayMode
验证小结的显示模式(BulletList,List,SingleParagraph)。
HeaderText
在验证小结信息顶部显示的标题文字。
EnableClientScript
指明TvalidationSummary是否采用客户端代码,布尔型(True 或False)数值。
ShowMessageBox
指明是否显示弹出框,布尔型(True 或False)数值,如果EnableClientScript已经设置为Flase,该属性不起作用
ShowSummary
指明验证小结信息是否在页内显示,布尔型(True 或False)数值

以下范例,在页面显示错误列表信息:

<com:TValidationSummary DisplayMode="BulletList"/>

总结

验证控件对相关的输入控件始终执行服务器端验证。客户端的验证避免了服务器端不必要的的往返操作,从而增强验证过程的响应。

多个验证控件通过不同的标准可以对单一的输入控件进行验证。比如,你可以通过多个验证控件对添加记录数量到购物车的TTextBox数值进行验证控制,添加TRangeValidator控件和TRequiredFieldValidator控件确保TTextBox控件输入指定的范围数值和输入非空的数值。

当输入控件验证失败,ErrorMessage属性设定的文字将在验证控件处显示。当Web页面上同时存在TValidationSummary控件时,该文字也将同时在该控件处显示。


N.B.当输入控件为空时,将不调用任何验证函数,验证返回成功。采用RequiredFieldValidator控件要求用户输入非空字符。

Prado提供了一套基本的验证工具对用户输入进行简单而高效的操作。通过对表单输入的必须的验证,以确保数据的完整性和应用程序的安全性。但是,必须注意一点,验证操作并不完全覆盖了Web应用程序安全的所有方面。

完整代码列表

以下列出本文演示范例中完整的php和template代码。

ValidatorExample.php

<?php

/**
 * A simple example to demonstration the simplicity and
 * intuitiveness of adding input validation using PRADO.
 */
class ValidatorExample extends TPage
{

    /**
     * Register new user event.
     * Add a new user into the database.
     * @param TControl sender of the event
     * @param TEventParameter event parameter
     */
    function registerUser($sender, $param)
    {
        $msg = $this->msg;

        // check that all the validators were successful.
        if($this->isValid())
        {
            // add the new user details into a database
            // but for this example, we will just output a message.
            $msg->setText(''''User Added'''');
            $msg->setStyle(''''color:blue'''');
        }
    }

    /**
     * Check if the username exists.
     * @param TControl sender of the event
     * @param TServerValidateEventParameter event parameter
     */
    function c

上一页  [1] [2] [3]  下一页


[Sql Server]Sql精妙语句--各种求值函数  [网页制作]网页表格之---多个表格纵向排列
[网页制作]JavaScript另类用法--读取和写入cookie  [网页制作]号称非常安全的上网工具---360安全浏览器介绍
[办公软件]信息技术教学篇---Word工具栏的显示、隐藏及四种菜…  [操作系统]开始菜单---运行命令大总结
[操作系统]网络转载---64位操作系统与32位的区别  [操作系统]ldap:///(没有响应)Windows无法访问指定设备、路径…
[网络技术]安全篇---交换机设置方法介绍  [聊天工具]Real10 & Xpdf installation on Linux Box
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Web开发  · 网页制作
    · 平面设计  · 网站运营
    · 网站推广  · 搜索优化
    · 建站心得  · 站长故事
    · 互联动态
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台