Reusing expressions in asp.NET regular expression validation control

I have this in the ascx file:

<asp:textbox ID="AddHourlyRate" runat="server" width="55px" />
<asp:RegularExpressionValidator  ID="AddHourlyRateRegexValidator"
    ErrorMessage="Please enter a valid charge rate (whole number only)" 
    ValidationExpression="^\$?[0-9]+(\.[0]{2})?$" ControlToValidate="AddHourlyRate" 
    Display="Dynamic" runat="server" />

How can I reuse ValidationExpressionin another asp:RegularExpressionValidatorwithout having to copy-paste a regex expression? I am new to asp.NET.

+3
source share
5 answers

Create a class with a string const for each regular expression, I use this solution for your exact problem. This class is in the general assembly, which is divided between the number of projects. And you probably use regex in some other places, and not just validation elements.

Something like that:

public class RegularExpressions
{
  public const string TelephoneValidation = @"^[0-9 ]+$";
  public const string IntegerValidation = @"^\d+$";
}

Then you can set the validator expression from the code:

validator.ValidationExpression = RegularExpressions.IntegerValidation;

or in the markup:

<%@ Import Namespace="RegularExpression.Class.Namespace" %>  
.
.
.  
<asp:RegularExpressionValidator  ID="AddHourlyRateRegexValidator"
        ErrorMessage="Please enter a valid charge rate (whole number only)" 
        ValidationExpression="<%# RegularExpressions.IntegerValidation %>" ControlToValidate="AddHourlyRate" 
        Display="Dynamic" runat="server" />

, import.

+5

( Page_Load )

public const string WholeNumbersValidation = @"^\$?[0-9]+(\.[0]{2})?$";

protected void Page_Load(object sender, EventArgs e)
{
   AddHourlyRateRegexValidator.ValidationExpression = WholeNumbersValidation;
   AddHourlyRateRegexValidator.ErrorMessage= "Please enter a valid charge rate (whole number only)";
   validatorIdForNextField.ValidationExpression = WholeNumbersValidation;
   validatorIdForNextField.ErrorMessage= "Error message text 2";

}

ASP.NET , ControlToValidate.

, , , .

+2

, "ValidationExpression" ?

+1

- :

private RegularExpressionValidator GetValidatorControl(string controlToValidate, string errorMessage)
{

    RegularExpressionValidator validator = new RegularExpressionValidator();
    validator.ID = String.Format("{0}RegExValidator", controlToValidate);
    validator.ValidationExpression = @"^\$?[0-9]+(\.[0]{2})?$";
    validator.ControlToValidate = controlToValidate;
    validator.ErrorMessage = errorMessage;
    return validator;

}

, Page_Load , :

Page.Controls.AddAt(Page.Controls.IndexOf(AddHourlyRate) + 1, GetValidatorControl(control.ID, "my validation message"));

, ( ).

, RegEx , ValidationExpression . , ( RootPanel ) , :

IEnumerable<Control> validators = RootPanel.FlattenChildren();

IEnumerator<Control> enumerator = validators.GetEnumerator();

while (enumerator.MoveNext() == true)
{
    if (enumerator.Current is RegularExpressionValidator) //Only interested in RegularExpressionValidators. You could even filter this further by naming them consistently and checking for a fragment of the ID here.
    {
        ((RegularExpressionValidator)enumerator.Current).ValidationExpression = @"^\$?[0-9]+(\.[0]{2})?$"; //Load from config if necessary!
    }
}

FlattenChildren, - . . .Net.

, , RegularExpressionValidator . - , , javascript PostBack.

+1

, web.config, #.

web.config:

<appSettings>
  <add key="myRegExString" value="^\$?[0-9]+(\.[0]{2})?$" />
</appSettings>

YourPage.aspx:

<asp:textbox ID="AddHourlyRate" runat="server" width="55px" />
<asp:RegularExpressionValidator  ID="AddHourlyRateRegexValidator"
    ErrorMessage="Please enter a valid charge rate (whole number only)" 
    ValidationExpression="<% = ConfigurationSettings.AppSettings["myRegExString"]%>" ControlToValidate="AddHourlyRate" 
    Display="Dynamic" runat="server" />
+1

All Articles