合并 RegularExpression 验证控件和 RequiredField 验证控件






3.12/5 (13投票s)
2004年10月12日
2分钟阅读

64373

979
RequiredField 和正则表达式验证结合使用... 您可以使用此控件来代替分组的 required field 和正则表达式验证控件。
引言
在成功实现了通用的 Required Field Validator 之后,许多朋友要求我实现一个 Regular Expression Field Validator,它也可以同时进行 required field 验证。 如果我们可以将它结合在一起,似乎非常有用……所以这就是了……我提出了一个通用的 Regular Expression Field Validator,可以选择是否进行 required field 验证。
使用代码
此控件非常易于使用,与普通的 Regular Expression Field Validation 控件非常相似。 如果您只有一个正则表达式字段,则此控件的行为类似于 Regular Expression Field Validation Control。 如果您有一组控件要验证,请在 Page_Load
上使用 AddControlToValidate(TextBox Control, ErrorMessageToBeDisplay)
。 您可以将 Alert
类型设置为 Alert window(0)
或 Summary(1)
。 默认情况下,它会弹出警报消息给用户,并将焦点设置到必填字段。
private void Page_Load(object sender, System.EventArgs e)
{
GroupReqValidator1.AddControlToValidate(TextBox1, "Please Enter Date ");
GroupReqValidator1.AddControlToValidate(TextBox2, "Please Enter Name");
GroupReqValidator1.AddControlToValidate(TextBox3, "Please Enter Surname");
}
关注点
听起来很有趣..!!! 那么,让我们开始探索这个控件背后的魔力。 这很简单。 由于我想增强 Required Field Validator,我从 System.Web.UI.WebControls.RequiredFieldValidator
派生了我的类,这样我们将免费获得所有基本功能!!! 因为我们要处理一组控件,所以我们需要某种集合来存储要验证的控件的引用,以及违反验证规则时要显示的相应消息。 我为此使用了 ArrayList
和一个变量来存储显示样式。
///
/// ArrayList to Hold objects to be validated
///
private System.Collections.ArrayList objList=
new System.Collections.ArrayList();
///
/// ArrayList to Hold Message when Object is not Valid
///
private System.Collections.ArrayList arrErrorMessage=
new System.Collections.ArrayList();
///
/// Style to be used to display the error message
///
private int iAlertType=0;
添加方法以向控件添加字段和消息
创建一个函数以将控件和消息添加到此 ArrayList
///
/// Add TextBox control and Display message to private ArrayList
///
public void AddControlToValidate(TextBox objCtl,string strErrorMessage)
{
objList.Add(objCtl);
arrErrorMessage.Add(strErrorMessage);
}
验证将在两个地方进行。 首先在客户端,然后在服务器端。 对于客户端验证,我们需要生成客户端脚本。 我在 OnPreRender
函数中完成了这项工作。
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender (e);
if(objList.Count==0)
{
AddControlToValidate((TextBox)Page.FindControl(ControlToValidate),
ErrorMessage);
}
System.Text.StringBuilder strJavaScript=new System.Text.StringBuilder();
//Generate the Validation Event to Validate control
strJavaScript.Append(@"<script langauge=""JavaScript"">");
strJavaScript.Append(@"function ValidateGroupRegControl()" +
@"{var re = new RegExp('"+
ValidationExpression.Replace("\\","\\\\") +
"');var m='';var msg='';");
for(int i=0;i<objList.Count;i++)
{
strJavaScript.Append(@"m=re.exec(document.all['"+
((TextBox)objList[i]).ID+"'].value);");
strJavaScript.Append(@"if( m == null || m[0]!=document.all['"
+((TextBox)objList[i]).ID+"'].value){");
if(!blnRequired)
{
strJavaScript.Append(@"if(document.all['"+
((TextBox)objList[i]).ID+"'].value=='') return true;");
}
//Add Alert is Type is set to Alert else build
//the error message string to be displayed
if(iAlertType==0)
{
strJavaScript.Append(@"alert('"+(string)arrErrorMessage[i]+
"');document.all['"+((TextBox)objList[i]).ID+
"'].focus();return false;}");//
}
else
{
strJavaScript.Append(@"msg=msg+'<li>"+
(string)arrErrorMessage[i]+"</li>';}");
}
}
if(iAlertType==1)
{
strJavaScript.Append(@"if(msg!=''){document.all['"+
this.ID+"'].style.visibility='visible';document.all['"+
this.ID+"'].innerHTML=msg+'</ui>';alert(document.all['"+
this.ID+"'].visibility);return false;}");
}
strJavaScript.Append(@"return true;}</script>");
Page.RegisterClientScriptBlock("funRegValidate",strJavaScript.ToString());
注册脚本后,我们需要在提交表单时调用此脚本。 我们可以使用 RegisterOnSubmitStatement
函数注册需要在 Submit
事件上调用的 JavaScript。
protected override void OnInit(EventArgs e)
{
base.OnInit (e);
Page.RegisterOnSubmitStatement("GroupValidation",
"return ValidateGroupControl();");
}
到目前为止一切顺利,现在客户端验证已经完成。 但是如果 JavaScript 被禁用怎么办? 因此,我们也必须实现服务器端验证。 我们可以通过实现 EvaluateIsValid
来做到这一点。
protected override bool EvaluateIsValid()
{
bool result=true;
string strmsg="";
System.Text.RegularExpressions.Regex reg =
new System.Text.RegularExpressions.Regex(RegularExpression);
for(int i=0;i<objList.Count;i++)
{
System.Text.RegularExpressions.MatchCollection Mcol =
reg.Matches(((TextBox)objList[i]).Text.Trim());
if(Mcol.Count<0 || !Mcol[0].Value.Equals(((TextBox)objList[i]).Text.Trim()))
{
strmsg+="<br>"+(string)arrErrorMessage[i];
result=false;
}
}
this.ErrorMessage = strmsg;
return result;
}
开始了...构建此控件库,添加对您的项目的引用,并享受验证。
历史
- 创建于 2004 年 10 月 10 日。