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?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

BuggyCoderCommented:
ValidationExpression="^\d+$"
0
DovbermanAuthor Commented:
That did not work.
Any other suggestions?
Thanks,
0
BuggyCoderCommented:
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

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Cloud Class® Course: Microsoft Windows 7 Basic

This introductory course to Windows 7 environment will teach you about working with the Windows operating system. You will learn about basic functions including start menu; the desktop; managing files, folders, and libraries.

basicinstinctCommented:
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
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
ASP.NET

From novice to tech pro — start learning today.

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.