65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.22/5 (3投票s)

2007年4月17日

1分钟阅读

viewsIcon

43215

downloadIcon

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 的自定义验证器拯救了我。

历史

© . All rights reserved.