用于邮编、电话和电子邮件的自定义验证控件






1.22/5 (3投票s)
2007年4月17日
1分钟阅读

43215

220
本文档展示了如何开发一个自定义验证控件,在一个控件中验证邮编、电话和电子邮件。
引言
本文档为读者提供了创建自定义验证器控件的代码,该控件通过指定属性,可以一次性完成邮编、电话和电子邮件的验证。希望与CodeProject的其他读者分享,以获取反馈,并为用户提供一个现成的控件。
背景
在为一个客户的项目工作时,我需要创建一个包含邮编、电话、电子邮件和其他联系信息的标准表单。我需要验证邮编、电子邮件和电话是否为空,并使用正则表达式进行验证。我最初创建了两个控件:一个必需字段验证器和一个正则表达式验证器,虽然验证工作正常,但渲染效果不好,尤其是在检查正则表达式时,它会先显示一个空白,然后再显示消息,而空白是由必需字段验证器引起的。
客户反对我使用JavaScript,因此为了消除间隙并拥有一个执行这两个功能的验证器控件,我创建了一个自定义验证器控件,这正是我想要的。
使用代码
为了创建自定义控件,您需要从创建一个类文件开始,在本例中,它将是 CustomZipValidator.vb,并将其放置在应用程序代码文件夹中。类文件中的代码如下所示,该类将继承自 BaseValidator 类,并重写 EvaluateIsValid() 方法。
'Inherits the base validator Public Class CustomZipPhoneEmailValidator Inherits BaseValidator 'Override the EvaluateIsValid Protected Overrides Function EvaluateIsValid() As Boolean Dim value As String = Me.GetControlValidationValue(Me.ControlToValidate) If (value.Equals(String.Empty) Or value.Length = 0) Then Return False Else If _propertyToValidate.Equals("Zip") Then If Regex.IsMatch(value, "(^(?!0{5})(\d{5})(?!-?0{4})(-?\d{4})?$)") = False Then ErrorMessage = "Invalid Postal Code format,Please try xxxxx or xxxxx-xxxx" Return False Else Return True End If End If If _propertyToValidate.Equals("Phone") Then If Regex.IsMatch(value, "((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}") = False Then ErrorMessage = "Invalid Phone format,Please try (xxx)xxx-xxxx or xxx-xxx-xx" Return False Else Return True End If End If If _propertyToValidate.Equals("Email") Then If Regex.IsMatch(value, "\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*") = False Then ErrorMessage = "Not a valid email" Return False Else Return True End If End If End If End Function
关注点
来自后端业务层编程的背景,ASP.NET 2.0 的自定义验证器拯救了我。
历史