asp.netvalidationreg-expressionvalidator

RegularExpressionValidator only checks once


I have a form in which I would like guests to enter their name, address etc... On each field I have a RequiredFieldValidator and a RegularExpressionValidator.

For example:

<asp:TextBox ID="mailNameTextBox" runat="server" MaxLength="70" ValidationGroup="mail"></asp:TextBox>
<asp:RegularExpressionValidator ID="mailNameTextBox_RegularExpressionValidator" runat="server" ErrorMessage="Name can only have letters or spaces." ControlToValidate="mailNameTextBox" ValidationExpression="[a-zA-Z' ']" ValidationGroup="mail" Display="Dynamic">*</asp:RegularExpressionValidator>
<asp:RequiredFieldValidator ID="mailNameTextBox_RequiredFieldValidator" runat="server" ErrorMessage="Name field is required." ControlToValidate="mailNameTextBox" ValidationGroup="mail" Display="Dynamic">*</asp:RequiredFieldValidator>

When I enter a name that includes a number (ie. fails the Regex) and "tab" out of the TextBox, the RegexValidator is instantly displayed with a *, and the form fails to submit. But when I go back and remove the number (ie. pass the Regex), the Validator doesn't seem to re-check the input, and the form will forever fail to submit.

Is there a way to always fire the Validation when leaving the box rather than just the first time (besides calling a Validation method upon the TextBox losing focus). I would have thought this would be automatic?

I have spent some time trying to find an answer to this, and I'm not sure how to word my question to "thouroughly research it", so I'm sorry if this is a duplicate.

I did see this one: ASP.NET: RegularExpressionValidator Doesn't reCheck the input but it didn't really help in my case.


Solution

  • Your validation expression is this:

    [a-zA-Z' ']
    

    Which means: exactly one letter or one apostroph or one space.

    You probably want to use something like the following:

    [\w\s]*
    

    Which means: any number of letters or whitespaces.