Click here to Skip to main content
15,878,871 members
Articles / Web Development / ASP.NET

Common Validation and Length Validation with Regular Expressions in ASP.NET

Rate me:
Please Sign up or sign in to vote.
4.59/5 (15 votes)
20 Aug 2008CPOL2 min read 117.4K   596   47   8
Common validation and length validation with Regular Expressions in ASP.NET.

Introduction

Input validation is very common and important in any kind of application. In the case of web applications, server side validation is a must, and client side validation is highly anticipated. As you know, ASP.NET provides you with a handful of validation controls like RequiredFiledValidator, RegularExpressionValidator etc. Most of the time, we have to check whether the user has given the correct number, date, time, or anything as input. To validate such things, we use the RegularExpressionValidator.

In this article, I'll provide a Util class full of Regular Expressions for the most common input validation requirements. The main part is the length validation of a TextArea control. As you know, in the case of a TextField, you can easily get its max length. But for TextArea, you cannot do that. So normally, we have to write a JavaScript function to check the length before form submit.

But in ASP.NET, when you use a TextBox and set the TextMode property as MultiLine, the MaxLength property does not work. So if you want to put a restriction to limit the input length of the TextBox, you have to find an alternate way.

Here, I'll show how you can do this by simply writing a Regular Expression.

The Code

The RegExp class:

C#
using System;
using System.Collections.Generic;
using System.Text;

namespace Util
{
    public class RegExp
    {

        public static readonly string Url = "[a-zA-Z0-9-_\\$]+(//.[a-za-z0-9-_//$]+)?\\??" + 
               "[a-zA-Z0-9-_\\$]+=?[a-zA-Z0-9-_\\$]+(&[a-zA-Z0-9-_\\$]+=" + 
               "[a-zA-Z0-9-_\\$]+)*";">\\.[a-zA-Z0-9-_\\$]+)?\\??" + 
               "[a-zA-Z0-9-_\\$]+=?[a-zA-Z0-9-_\\$]+(&" + 
               "[a-zA-Z0-9-_\\$]+=[a-zA-Z0-9-_\\$]+)*";
        public static readonly string Date = "(0[1-9]|[12][0-9]|3[01])[-]" + 
               "(0[1-9]|1[012])[-]((175[7-9])|(17[6-9][0-9])|(1[8-9][0-9][0-9])|" + 
               "([2-9][0-9][0-9][0-9]))";
               // supports dates from 1-1-1757 to 31-12-9999 for SQL Server 2000 Date Range 
        public static readonly string Time = "(0[1-9]|[1][0-2])[:]" + 
               "(0[0-9]|[1-5][0-9])[:](0[0-9]|[1-5][0-9])[ ][A|a|P|p][M|m]";
        public static readonly string Number = "[-+]?[0-9]*\\.?[0-9]*";
        public static readonly string Digit = "[0-9]*";
        public static readonly string NonNegative = "[+]?[0-9]*\\.?[0-9]*";

        public static string MaxLength(int len)
        {
            return "[\\s\\S]{0," + len.ToString() + "}";
        }
    }
}

The ValidationMessages class:

C#
using System;
using System.Collections.Generic;
using System.Text;

namespace Resource
{
    public class ValidationMessages
    {

    public static readonly string Url = "* Please enter a valid URL.<br>Valid " + 
           "characters are all alphanumeric characters and .?" + 
           "&_=-$<br> example: home.aspx?id=5&name=$my_name";
        public static readonly string Required = "* Required";
        public static readonly string Date = 
           "* Please enter a valid date in dd-MM-yyyy format.";
        public static readonly string Time = 
           "* Please enter a valid time in hh:mm:ss am format.";
        public static readonly string Number = "* Must be a valid number.";
        public static readonly string Digit = "* Must be a valid whole number.";
        public static readonly string NonNegative = "* Must be a non-negative number.";

        public static string MaxLength(int len)
        {
            return "* Maximum " + len.ToString() + 
                   " characters are allowed.";
        }
    }
}

Using the Code

The usage is very simple. See the example page.

Defaul.aspx page
ASP.NET
<%@ 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">
        <div>
            <h3>
                Validation Example</h3>
            <table border="1" width="50%">
                <tr>
                    <td style="width: 200px">
                        <asp:Label ID="CommentLabel" 
                            runat="server" Text="Comment:">
                        </asp:Label></td>
                    <td>
                        <asp:TextBox ID="CommentTextBox" runat="server" 
                             TextMode="MultiLine" Width="500px" />
                        <asp:RegularExpressionValidator ID="CommentValidator" 
                          runat="server" ControlToValidate="CommentTextBox">
                        </asp:RegularExpressionValidator>
                    </td>
                </tr>
                <tr>
                    <td>
                        <asp:Label ID="DateLabel" runat="server" 
                           Text="Date:"></asp:Label></td>
                    <td>
                        <asp:TextBox ID="DateTextBox" 
                           runat="server" Width="500px" />
                        <asp:RegularExpressionValidator ID="DateValidator" runat="server" 
                          ControlToValidate="DateTextBox"></asp:RegularExpressionValidator>
                    </td>
                </tr>
                <tr>
                    <td>
                        <asp:Label ID="TimeLabel" runat="server" 
                          Text="Time:"></asp:Label></td>
                    <td>
                        <asp:TextBox ID="TimeTextBox" 
                           runat="server" Width="500px" />
                        <asp:RegularExpressionValidator ID="TimeValidator" runat="server" 
                          ControlToValidate="TimeTextBox"></asp:RegularExpressionValidator>
                    </td>
                </tr>
                <tr>
                    <td>
                        <asp:Label ID="NumberLabel" runat="server" 
                          Text="Number:"></asp:Label></td>
                    <td>
                        <asp:TextBox ID="NumberTextBox" 
                           runat="server" Width="500px" />
                        <asp:RegularExpressionValidator ID="NumberValidator" runat="server" 
                          ControlToValidate="NumberTextBox">
                        </asp:RegularExpressionValidator>
                    </td>
                </tr>
                <tr>
                    <td>
                        <asp:Label ID="DigitLabel" runat="server" 
                          Text="Digit:"></asp:Label></td>
                    <td>
                        <asp:TextBox ID="DigitTextBox" 
                           runat="server" Width="500px" />
                        <asp:RegularExpressionValidator ID="DigitValidator" runat="server" 
                          ControlToValidate="DigitTextBox"></asp:RegularExpressionValidator>
                    </td>
                </tr>
                <tr>
                    <td>
                        <asp:Label ID="NonNegativeLabel" runat="server" 
                           Text="Non Negative:"></asp:Label></td>
                    <td>
                        <asp:TextBox ID="NonNegativeTextBox" 
                               runat="server" Width="500px" />
                        <asp:RegularExpressionValidator 
                          ID="NonNegativeValidator" runat="server" 
                          ControlToValidate="NonNegativeTextBox">
                        </asp:RegularExpressionValidator>
                    </td>
                </tr>
                <tr>
                    <td>
                        <asp:Label ID="UrlLabel" runat="server" Text="Url:">
                        </asp:Label></td>
                    <td>
                        <asp:TextBox ID="UrlTextBox" 
                              runat="server" Width="500px" />
                        <asp:RegularExpressionValidator ID="UrlValidator" runat="server" 
                          ControlToValidate="UrlTextBox"></asp:RegularExpressionValidator>
                    </td>
                </tr>
            </table>
        </div>
    </form>
</body>
</html>
Defaul.aspx.cs page
C#
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

using Util;
using Resource;

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        CommentValidator.ValidationExpression = RegExp.MaxLength(50);
        CommentValidator.ErrorMessage = ValidationMessages.MaxLength(50);

        DateValidator.ValidationExpression = RegExp.Date;
        DateValidator.ErrorMessage = ValidationMessages.Date;

        TimeValidator.ValidationExpression = RegExp.Time;
        TimeValidator.ErrorMessage = ValidationMessages.Time;

        NumberValidator.ValidationExpression = RegExp.Number;
        NumberValidator.ErrorMessage = ValidationMessages.Number;

        DigitValidator.ValidationExpression = RegExp.Digit;
        DigitValidator.ErrorMessage = ValidationMessages.Digit;

        NonNegativeValidator.ValidationExpression = RegExp.NonNegative;
        NonNegativeValidator.ErrorMessage = ValidationMessages.NonNegative;

        UrlValidator.ValidationExpression = RegExp.Url;
        UrlValidator.ErrorMessage = ValidationMessages.Url;
    }
}
Screenshot

screenshot.jpg

Here, the URL validator expression and message were needed for my business requirements. If you have a different requirement, then customize it.

My Other Articles

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior)
Australia Australia
-7 years of extensive experience in devloping both desktop and web applications in C#.NET, VB.NET and ASP.NET, ASP.NET MVC 3.0/4.0
-5 years of experience in developing web applications in J2EE, Free Marker, JSP, Spring MVC, Spring Webflow.
-Expertise in Software Architecture and Framework design.
Blog: http://sowkot.blogspot.com


Comments and Discussions

 
GeneralMy vote of 5 Pin
kdgupta8724-Jan-11 9:12
kdgupta8724-Jan-11 9:12 
GeneralDate validation Pin
kryzchek21-Aug-08 8:29
kryzchek21-Aug-08 8:29 
Looks like your date validation will allow a user to enter 31 days for months that only contain 30 days. You might want to take that into account.
GeneralRe: Date validation Pin
Sowkot Osman21-Aug-08 9:16
Sowkot Osman21-Aug-08 9:16 
GeneralNice Work Pin
Aslesh21-Aug-08 2:45
Aslesh21-Aug-08 2:45 
GeneralRe: Nice Work Pin
Sowkot Osman21-Aug-08 9:22
Sowkot Osman21-Aug-08 9:22 
GeneralRe: Nice Work Pin
Aslesh21-Aug-08 9:35
Aslesh21-Aug-08 9:35 
GeneralGood Job !! Pin
Abhijit Jana20-Aug-08 22:58
professionalAbhijit Jana20-Aug-08 22:58 
General[Message Removed] Pin
Mojtaba Vali13-Aug-08 17:53
Mojtaba Vali13-Aug-08 17:53 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.