刚刚在codeproject上面逛,看见David Veeneman以前写的一篇验证正则的文章很不错,小巧快捷,安装后,可以快速的编写正则表达式,并填入验证文本进行验证。思路:将正则表达式文本作为Regex构造函数的一个参数,来创建一个Regex的实例,如果正则表达式错误,Regex类将抛出一个参数无效异常,利用try...catch捕获这个异常,将异常信息作为消息显示给用户,如果正则表达式正确,再继续将测试文本和正则进行匹配,并提示成功信息。
见图:
测试文本匹配正则失败界面
测试文本匹配正则成功的界面
正则表达式输入不正确时的异常信息
源代码分析:
using
System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
namespace RegexTester
{
public partial class Form1 : Form
{
private Regex regex = null ;
public Form1()
{
InitializeComponent();
}
private void RegexText_TextChanged( object sender, EventArgs e)
{
// 没有正则表达式输入
if (RegexText.Text == String.Empty)
{
RegexText.BackColor = Color.White;
TestText.BackColor = Color.White;
Message.Text = String.Empty;
return ;
}
// 验证正则
try
{
regex = new Regex(RegexText.Text);
Message.Text = String.Empty;
RegexText.BackColor = Color.PaleGreen;
this .ValidateTestBox();
}
catch (ArgumentException error)
{
Message.Text = error.Message;
RegexText.BackColor = Color.LightPink;
}
}
private void TestText_TextChanged( object sender, EventArgs e)
{
this .ValidateTestBox();
}
private void ValidateTestBox()
{
// 如果没有正则表达式即跳过验证
if (RegexText.Text == String.Empty)
{
TestText.BackColor = Color.White;
return ;
}
// 验证正则
bool IsMatch = regex.IsMatch(TestText.Text);
if (IsMatch)
{
Message.Text = " 匹配成功 " ;
Message.ForeColor = Color.Green;
TestText.BackColor = Color.PaleGreen;
}
else
{
Message.Text = " 匹配失败 " ;
Message.ForeColor = Color.Red;
TestText.BackColor = Color.LightPink;
}
}
private void buttonClearAll_Click( object sender, EventArgs e)
{
RegexText.Clear();
TestText.Clear();
}
private void buttonClearRegex_Click( object sender, EventArgs e)
{
RegexText.Clear();
}
private void buttonClearTest_Click( object sender, EventArgs e)
{
TestText.Clear();
}
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
namespace RegexTester
{
public partial class Form1 : Form
{
private Regex regex = null ;
public Form1()
{
InitializeComponent();
}
private void RegexText_TextChanged( object sender, EventArgs e)
{
// 没有正则表达式输入
if (RegexText.Text == String.Empty)
{
RegexText.BackColor = Color.White;
TestText.BackColor = Color.White;
Message.Text = String.Empty;
return ;
}
// 验证正则
try
{
regex = new Regex(RegexText.Text);
Message.Text = String.Empty;
RegexText.BackColor = Color.PaleGreen;
this .ValidateTestBox();
}
catch (ArgumentException error)
{
Message.Text = error.Message;
RegexText.BackColor = Color.LightPink;
}
}
private void TestText_TextChanged( object sender, EventArgs e)
{
this .ValidateTestBox();
}
private void ValidateTestBox()
{
// 如果没有正则表达式即跳过验证
if (RegexText.Text == String.Empty)
{
TestText.BackColor = Color.White;
return ;
}
// 验证正则
bool IsMatch = regex.IsMatch(TestText.Text);
if (IsMatch)
{
Message.Text = " 匹配成功 " ;
Message.ForeColor = Color.Green;
TestText.BackColor = Color.PaleGreen;
}
else
{
Message.Text = " 匹配失败 " ;
Message.ForeColor = Color.Red;
TestText.BackColor = Color.LightPink;
}
}
private void buttonClearAll_Click( object sender, EventArgs e)
{
RegexText.Clear();
TestText.Clear();
}
private void buttonClearRegex_Click( object sender, EventArgs e)
{
RegexText.Clear();
}
private void buttonClearTest_Click( object sender, EventArgs e)
{
TestText.Clear();
}
}
}