| 美国社保号码: \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格式显示。通过分别设置 ShowSummary 和ShowMessageBox属性可以以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] 下一页 |