Solved

Regular Expression Validator to Trap non-numeric entry.

Posted on 2012-04-08
9
613 Views
Last Modified: 2012-04-09
<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,
0
Comment
Question by:Dovberman
  • 5
  • 3
9 Comments
 
LVL 20

Expert Comment

by:BuggyCoder
ID: 37821109
ValidationExpression="^\d+$"
0
 

Author Comment

by:Dovberman
ID: 37821201
That did not work.
Any other suggestions?
Thanks,
0
 
LVL 20

Accepted Solution

by:
BuggyCoder earned 250 total points
ID: 37821479
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
PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

 
LVL 23

Assisted Solution

by:basicinstinct
basicinstinct earned 250 total points
ID: 37821779
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
 

Author Comment

by:Dovberman
ID: 37822403
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
 
LVL 20

Expert Comment

by:BuggyCoder
ID: 37822410
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
 

Author Comment

by:Dovberman
ID: 37822438
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
 

Author Comment

by:Dovberman
ID: 37822474
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
 

Author Closing Comment

by:Dovberman
ID: 37823049
I appreciate the suggestions made and the effort spent.<br /><br />That's why I divided the points evenly.<br /><br />Thanks,
0

Featured Post

Does Powershell have you tied up in knots?

Managing Active Directory does not always have to be complicated.  If you are spending more time trying instead of doing, then it's time to look at something else. For nearly 20 years, AD admins around the world have used one tool for day-to-day AD management: Hyena. Discover why

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

IntroductionWhile developing web applications, a single page might contain many regions and each region might contain many number of controls with the capability to perform  postback. Many times you might need to perform some action on an ASP.NET po…
It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
This video shows how to use Hyena, from SystemTools Software, to bulk import 100 user accounts from an external text file. View in 1080p for best video quality.
A short tutorial showing how to set up an email signature in Outlook on the Web (previously known as OWA). For free email signatures designs, visit https://www.mail-signatures.com/articles/signature-templates/?sts=6651 If you want to manage em…

831 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question