Regular Expression Validator to Trap non-numeric entry.

<asp:TextBox ID="txtMinPrice" runat="server" Width="45px">
    </asp:TextBox>

           <asp:RegularExpressionValidator ID="valMinPrice" runat="server"
                            ErrorMessage="The Minimum Price needs to be numeric. "
                            ValidationExpression="^\d{0,3}(\.\d{1,2})?$"
                            ControlToValidate="txtMinPrice" SetFocusOnError="true"
                            EnableClientScript="False" Display="Dynamic">
            </asp:RegularExpressionValidator>

Entered abc instead of the number 5.

non-numeric not trapped

What should I change?

Thanks,
DovbermanAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
BuggyCoderConnect With a Mentor Commented:
Well it worked perfectly for me, here is the markup to use:-

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
    
</head>
<body>
    
    <form id="form1" runat="server">
    <asp:TextBox runat="server" ID="txtTest"></asp:TextBox>
    <asp:Button runat="server" ID="btnTest" onclick="btnTest_Click"/>
    <asp:RegularExpressionValidator ID="rgValidator" ControlToValidate="txtTest" ValidationExpression="^\d+$" runat="server" ErrorMessage="Only Numbers Are Allowed!!!"></asp:RegularExpressionValidator>
    </form>
</body>
</html>

Open in new window


And Here is the code behind:-

using System;

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void btnTest_Click(object sender, EventArgs e)
    {
        if(this.IsValid)
        {
            
        }
    }
}

Open in new window

0
 
BuggyCoderCommented:
ValidationExpression="^\d+$"
0
 
DovbermanAuthor Commented:
That did not work.
Any other suggestions?
Thanks,
0
Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

 
basicinstinctConnect With a Mentor Commented:
the problem is not with your regular expression.
the regex you have "^\d{0,3}(\.\d{1,2})?$" allows a an amount between 0 to 999.99

why don't you try a RangeValidator
0
 
DovbermanAuthor Commented:
To BuggyCoder:

<asp:TextBox ID="txtMinPrice" runat="server" Width="45px"
    onTextChanged = "txtMinPrice_TextChanged" CausesValidation="true">
    </asp:TextBox>

<asp:RegularExpressionValidator ID="valMinPrice" runat="server"
                            ErrorMessage="The Minimum Price needs to be numeric. "
                            ControlToValidate="txtMinPrice" SetFocusOnError="true"
                            EnableClientScript="False" Display="Dynamic"
                            ValidationExpression="^\d+$">
                        </asp:RegularExpressionValidator>

     protected void txtMinPrice_TextChanged(object sender, EventArgs e)

    {
        int Test1 = 0;
       if (this.IsValid)
        {
        Test1 = 1;
        }
    }

Error:

Page.IsValid cannot be called before validation has taken place.
It should be queried in the event handler for a control that has
CausesValidation=True and initiated the postback,
or after a call to Page.Validate.
0
 
BuggyCoderCommented:
you are applying it in text changed event of text box, this event will fire with every change in textbox data.
Ideally IsValid should be called on button click where we like to validate data before the final submit....

In your case you are making your text box to cause validation, this is not right or a good practice.
Suggest have a button and make its cause validation true and remove causevalidation from textbox....
0
 
DovbermanAuthor Commented:
To BasicInstinct

<asp:RangeValidator ID="valMinPrice" runat="server"
                        ErrorMessage="The Minimum Price needs to be numeric and between 1 and 100"
                        MaximumValue="100"
                        MinimumValue="1"
                        ControlToValidate="txtMinPrice" Display="Dynamic" SetFocusOnError="True">
                </asp:RangeValidator>

Error on any value entered except "1.00" or "1".
0
 
DovbermanAuthor Commented:
This is what I did that works.  It is complex, but does the job.

I used the TextChanged event. Then disabled the main process button if the entry was not numeric.

Based on
http://www.experts-exchange.com/Programming/Languages/C_Sharp/Q_22806510.html

<asp:TextBox ID="txtMinPrice" runat="server" Width="45px"
    onTextChanged = "txtMinPrice_TextChanged" AutoPostBack="True">
    </asp:TextBox>

Code behind:

 public void txtMinPrice_TextChanged(object sender, EventArgs e)
    {
        lblResult.Text = "";
        string strEntered = txtMinPrice.Text;
        bool blnIsNumeric = IsNumeric(strEntered);
        if (!blnIsNumeric)
        {
            lblResult.Text = "Price must be numeric and between 1.00 and 100.00";
            cmdGetResults.Enabled = false;
         }

        else
        {
            cmdGetResults.Enabled =true;
        }
        return;
    }

     public static bool IsNumeric(string pstrEntry)
            {
                bool isNum;
                double retNum;

                isNum = Double.TryParse(Convert.ToString(pstrEntry),
                    System.Globalization.NumberStyles.Any,
                    System.Globalization.NumberFormatInfo.InvariantInfo, out retNum);

                return isNum;

            }
0
 
DovbermanAuthor Commented:
I appreciate the suggestions made and the effort spent.<br /><br />That's why I divided the points evenly.<br /><br />Thanks,
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.