Introduction
This article is about a Windows application and presents a more involved example that uses Regular Expressions to validate name, address and telephone number information input by a user. Before explaining the sample I would like to provide a little explanation of Regular Expressions.
Regular Expression
Regular Expressions are specially formatted strings for specifying patterns in text. They can be useful during information validation, to ensure that data is in a specified format. For example, a ZIP code must consist of five digits, and a last name must start with a capital letter. Compilers use Regular Expressions to validate the syntax of programs. If the program code does not match the Regular Expression then the compiler indicates that there is a syntax error.
Let's go for the details of my illustration. When a user clicks the OK button, the program checks to ensure that none of the fields are empty. If one or more fields are empty then the program displays a message to the user that all fields must be filled in before the program can validate the input information.
// ensures no TextBoxes are empty
if (lastNameTextBox.Text == "" || firstNameTextBox.Text == "" || addressTextBox.Text == "" || cityTextBox.Text == "" || stateTextBox.Text == "" || zipCodeTextBox.Text == "" || phoneTextBox.Text == "")
{
// display popup box
MessageBox.Show("Please fill in all fields","Error",MessageBoxButton.OK,MessageBoxImage.Error);
firstNameTextBox.Focus(); // set focus to lastNameTextBox
return;
} // end if
The code above calls the firstNameTextBox's Focus method to place the cursor in the firstNameTextBox.. If there are no empty fields then the following code validates the first name by calling the static method Match of the Regex class, passing both the string to validate and the Regular Expression as arguments. Method Match returns a Match object. This object contains a Success property that indicates whether a method Match's first argument matches the pattern specified by the Regular Expression in the second argument. If the value of Success is false (i.e., there was no match) then display an error message and set the focus back to the firstNameTextBox so that the user can retype the input and terminate the event handler. If there is a match then the event handler proceeds to validate the first name.
if (!Regex.Match(firstNameTextBox.Text, "^[A-Z][a-zA-Z]*$").Success)
{
// first name was incorrect
MessageBox.Show("Invalid first name", "Message", MessageBoxButton.OK,MessageBoxImage.Error);
firstNameTextBox.Focus();
return;
}
This process continues until the event handler validates the user input in all the TextBoxes or until a validation fails. If all of the fields contain valid information then the program displays a message dialog stating this, and the program exits when the user dismisses the dialog.
Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Text.RegularExpressions;
namespace MyRND_in_WPF
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void btnOK_Click(object sender, RoutedEventArgs e)
{
// ensures no TextBoxes are empty
if (lastNameTextBox.Text == "" || firstNameTextBox.Text == "" || addressTextBox.Text == "" || cityTextBox.Text == "" || stateTextBox.Text == "" || zipCodeTextBox.Text == "" ||
phoneTextBox.Text == "")
{
// display popup box
MessageBox.Show("Please fill in all fields","Error",MessageBoxButton.OK,MessageBoxImage.Error);
firstNameTextBox.Focus(); // set focus to lastNameTextBox
return;
} // end if
// if first name format invalid show message
if (!Regex.Match(firstNameTextBox.Text, "^[A-Z][a-zA-Z]*$").Success)
{
// first name was incorrect
MessageBox.Show("Invalid first name", "Message", MessageBoxButton.OK,MessageBoxImage.Error);
firstNameTextBox.Focus();
return;
} // end if
// if last name format invalid show message
if (!Regex.Match(lastNameTextBox.Text, "^[A-Z][a-zA-Z]*$").Success)
{
// last name was incorrect
MessageBox.Show("Invalid last name", "Message", MessageBoxButton.OK,MessageBoxImage.Error);
lastNameTextBox.Focus();
return;
}// end if
// if address format invalid show message
if (!Regex.Match(addressTextBox.Text, @"^[0-9]+\s+([a-zA-Z]+|[a-zA-Z]+\s[a-zA-Z]+)$").Success)
{
// address was incorrect
MessageBox.Show("Invalid address", "Message", MessageBoxButton.OK,MessageBoxImage.Error);
addressTextBox.Focus();
return;
} // end if
// if city format invalid show message
if (!Regex.Match(cityTextBox.Text, @"^([a-zA-Z]+|[a-zA-Z]+\s[a-zA-Z]+)$").Success)
{
// city was incorrect
MessageBox.Show("Invalid city", "Message", MessageBoxButton.OK,MessageBoxImage.Error);
cityTextBox.Focus();
return;
}// end if
// if state format invalid show message
if (!Regex.Match(stateTextBox.Text, @"^([a-zA-Z]+|[a-zA-Z]+\s[a-zA-Z]+)$").Success)
{
// state was incorrect
MessageBox.Show("Invalid state", "Message", MessageBoxButton.OK,MessageBoxImage.Error);
stateTextBox.Focus();
return;
} // end if
// if zip code format invalid show message
if (!Regex.Match(zipCodeTextBox.Text, @"^\d{5}$").Success)
{
// zip was incorrect
MessageBox.Show("Invalid zip code", "Message", MessageBoxButton.OK,MessageBoxImage.Error);
zipCodeTextBox.Focus();
return;
} // end if
// if phone number format invalid show message
if (!Regex.Match(phoneTextBox.Text, @"^[1-9]\d{2}-[1-9]\d{2}-\d{4}$").Success)
{
// phone number was incorrect
MessageBox.Show("Invalid phone number", "Message", MessageBoxButton.OK,MessageBoxImage.Error);
phoneTextBox.Focus();
return;
}// end if
// information is valid, signal user and exit application
this.Hide(); // hide main window while MessageBox displays
MessageBox.Show("Thank You!", "Information Correct",MessageBoxButton.OK,MessageBoxImage.Information);
}
}
}
Summery
In the preceding illustration we saw how to use Regular Expressions to validate input using the Regex class of the System.Text.RegularExpressions namespace.