Esempio di controllo di convalida di espressione regolare
Il controllo di convalida di espressione regolare illustrato è un'estensione del controllo di convalida base descritto in Esempio di controllo di convalida base. Questa convalida aggiunge le seguenti funzionalità alla convalida base:
- Espone una proprietà denominata
ValidationExpression
che consente all'utente (lo sviluppatore di pagine) di specificare un'espressione regolare. - Esegue l'override del metodo
EvaluateIsValid
, definito come metodo astratto inBaseDomValidator
, in modo da fornire la logica necessaria per determinare se il campo da convalidare corrisponde al criterio specificato dall'espressione regolare. - Esegue l'override di AddAttributesToRender, ereditato da WebControl, per mettere a disposizione un gestore del client per la logica di valutazione. Il gestore del client è una funzione definita nella libreria di script.
Per compilare e generare questo esempio, vedere le istruzioni fornite in Esempi di controllo di convalida. Per informazioni generali sugli script client nei controlli server, vedere Funzionalità client in un controllo server.
// RegexDomValidator.cs.
namespace DomValidators {
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Diagnostics;
using System.Text.RegularExpressions;
using System.Drawing.Design;
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
[
ToolboxData("<{0}:RegexDomValidator runat=server ErrorMessage=\"RegexDomValidator\"></{0}:RegexDomValidator>")
]
public class RegexDomValidator : BaseDomValidator {
[
Bindable(true),
Category("Behavior"),
DefaultValue(""),
Editor("System.Web.UI.Design.WebControls.RegexTypeEditor,System.Design", typeof(UITypeEditor)),
Description("ValidationExpression")
]
public string ValidationExpression {
get {
object o = ViewState["ValidationExpression"];
return((o == null) ? String.Empty : (string)o);
}
set {
try {
Regex.IsMatch("", value);
}
catch (Exception e) {
//Throw new HttpException.
// HttpRuntime.FormatResourceString(SR.Validator_bad_regex, value), e);
throw new HttpException("Bad Expression", e);
}
ViewState["ValidationExpression"] = value;
}
}
protected override void AddAttributesToRender(HtmlTextWriter writer) {
base.AddAttributesToRender(writer);
if (RenderUplevel) {
writer.AddAttribute("evaluationfunction", "RegularExpressionValidatorEvaluateIsValid");
if (ValidationExpression.Length > 0) {
writer.AddAttribute("validationexpression", ValidationExpression);
}
}
}
protected override bool EvaluateIsValid() {
// Validation always succeeds if input is empty or value was not found.
string controlValue = GetControlValidationValue(ControlToValidate);
Debug.Assert(controlValue != null, "Should have already been checked");
if (controlValue == null || controlValue.Length == 0) {
return true;
}
try {
// Looking for an exact match, not just a search hit.
Match m = Regex.Match(controlValue, ValidationExpression);
return(m.Success && m.Index == 0 && m.Length == controlValue.Length);
}
catch {
Debug.Fail("Regex error should have been caught in property setter.");
return true;
}
}
}
}
[Visual Basic]
' RegexDomValidator.vb
Option Explicit
Option Strict
Imports System.ComponentModel
Imports System.ComponentModel.Design
Imports System.Diagnostics
Imports System.Text.RegularExpressions
Imports System.Drawing.Design
Imports System
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Namespace DomValidators
<ToolboxData("<{0}:RegexDomValidator runat=server ErrorMessage=""RegexDomValidator""></{0}:RegexDomValidator>")> _
Public Class RegexDomValidator
Inherits BaseDomValidator
<Bindable(True), _
Category("Behavior"), _
DefaultValue(""), _
Editor("System.Web.UI.Design.WebControls.RegexTypeEditor,System.Design", _
GetType(UITypeEditor)), _
Description("ValidationExpression")> _
Public Property ValidationExpression() As String
Get
Dim o As Object = ViewState("ValidationExpression")
If o Is Nothing Then
Return String.Empty
Else
Return CStr(o)
End If
End Get
Set
Try
Regex.IsMatch("", value)
Catch e As Exception
'Throw new HttpException.
' HttpRuntime.FormatResourceString(SR.Validator_bad_regex, value), e);
Throw New HttpException("Bad Expression", e)
End Try
ViewState("ValidationExpression") = value
End Set
End Property
Protected Overrides Sub AddAttributesToRender(writer As HtmlTextWriter)
MyBase.AddAttributesToRender(writer)
If RenderUplevel Then
writer.AddAttribute("evaluationfunction", "RegularExpressionValidatorEvaluateIsValid")
If ValidationExpression.Length > 0 Then
writer.AddAttribute("validationexpression", ValidationExpression)
End If
End If
End Sub
Protected Overrides Function EvaluateIsValid() As Boolean
' Always succeeds if input is empty or value was not found.
Dim controlValue As String = GetControlValidationValue(ControlToValidate)
Debug.Assert( Not (controlValue Is Nothing), "Should have already been checked")
If controlValue Is Nothing Or controlValue.Length = 0 Then
Return True
End If
Try
' Looking for an exact match, not just a search hit.
Dim m As Match = Regex.Match(controlValue, ValidationExpression)
Return m.Success And m.Index = 0 And m.Length = controlValue.Length
Catch
End Try
End Function
End Class
End Namespace
Vedere anche
Esempi di controllo di convalida | Esempio di controllo di convalida base | Esempio di controllo di convalida del campo obbligatorio | Esempio di libreria di script per la convalida | Esempio di file di configurazione per la convalida | Esempio di pagina di prova per la convalida | Sviluppo di un controllo di convalida