Do this:
go get a regex design/test tool, like
http://www.organicbit.com/regex/fog0000000019.html
Design and test the regex interactively using that tool.
When you think you have it, build a regex test app that tests all the
various combinations you can think of, and run it.
eg
namespace Ionic.Test.Emai lValidation {
/// <remarks>
/// Represents all the input for the test, including the regex to test,
/// and an array of test cases.
/// </remarks>
[System.Xml.Seri alization.XmlRo otAttribute("Em ail.Validation. Input",
Namespace="", IsNullable=fals e)]
public class TestInput {
/// <remarks/>
[System.Xml.Seri alization.XmlEl ementAttribute( Form=System.Xml .Schema.XmlSche
maForm.Unqualif ied)]
public string Regexp;
/// <remarks/>
[System.Xml.Seri alization.XmlAr rayAttribute(Fo rm=System.Xml.S chema.XmlSchema
Form.Unqualifie d)]
[System.Xml.Seri alization.XmlAr rayItemAttribut e("Case",
Form=System.Xml .Schema.XmlSche maForm.Unqualif ied, IsNullable=fals e)]
public TestCase[] TestList;
}
/// <remarks>
/// This is the type that stores a single test case.
/// We need a bunch of these to verify that the regex works as
/// expected. Each test case has an input and an output. In our
/// case, the input is a string, and the output is a bool value,
/// which indicates whether the Regex should match or not.
/// Other tests will have different input and output.
/// </remarks>
public class TestCase {
/// <remarks/>
[System.Xml.Seri alization.XmlAt tribute("Email" ,
Form=System.Xml .Schema.XmlSche maForm.Unqualif ied)]
public string Input;
/// <remarks/>
[System.Xml.Seri alization.XmlAt tribute("Valid" ,
Form=System.Xml .Schema.XmlSche maForm.Unqualif ied)]
public bool ExpectedOutput;
}
/// <remarks>
/// This is the test app. The main routine de-serializes from
/// an XML file, then runs the tests, comparing the expected
/// (or desired) output with the actual result.
/// </remarks>
public class Tester {
public static void Main() {
string InputPath= "EmailValidatio nInput.xml";
System.IO.FileS tream fs = new System.IO.FileS tream(InputPath ,
System.IO.FileM ode.Open);
System.Xml.Seri alization.XmlSe rializer s= new
System.Xml.Seri alization.XmlSe rializer(typeof (TestInput));
TestInput Input= (TestInput) s.Deserialize(f s);
fs.Close();
System.Text.Reg ularExpressions .Regex regex= new
System.Text.Reg ularExpressions .Regex (Input.Regexp);
foreach (TestCase tc in Input.TestList) {
System.Console. WriteLine(tc.In put +"\n " + tc.ExpectedOutp ut + " \\ " +
regex.IsMatch(t c.Input));
}
}
}
}
// This is input data. Store this in the XML file that is de-serialized for
this test.
<Email.Validati on.Input>
<TestList>
<!--
=============== =============== =============== =============== ====== -->
<!-- =============== ==== True test cases
=============== =============== -->
<!--
=============== =============== =============== =============== ====== -->
<Case Email="Ro***@ra bbit.com" Valid="true" />
<Case
Email="th****** *************** ************@so mething.org"
Valid="true" />
<Case Email="th****** *@something.9g" Valid="true" />
<Case Email="th****** *@place.org" Valid="true" />
<Case Email="We****** *****@cornell.e du" Valid="true" />
<Case Email="Ja****** *****@sun-east.com" Valid="true" />
<Case Email="Ja****** *****@sun.east. com" Valid="true" />
<Case Email="Ja****** *****@sun.com" Valid="true" />
<Case Email="Pr****** *@rolling-hills.club.org" Valid="true" />
<Case Email="9L****@c lub.org" Valid="true" />
<Case Email="fr**@som ewhere.org9" Valid="true" />
<Case Email="f@z.k" Valid="true" />
<Case Email="_e***@se same.org" Valid="true" />
<Case Email="Ha****** ****@Hogwarts.e du" Valid="true" />
<Case
Email="Pr****** *************** ***@Faculty.Hog warts.edu"
Valid="true" />
<!--
=============== =============== =============== =============== ====== -->
<!-- =============== ==== False="test cases
=============== ============== -->
<!--
=============== =============== =============== =============== ====== -->
<Case Email="-e***@sesame.org " Valid="false"/>
<Case Email="el**@ses ame.org." Valid="false" />
<Case Email="-e***@sesame.org ." Valid="false" />
<Case Email="elmo@.or g." Valid="false" />
<Case Email="elmo@.or g" Valid="false" />
<Case Email="elmo@.so meplace.org" Valid="false" />
<Case Email="elmo@clo ud9" Valid="false" />
<Case Email="fred.@so mewhere.org9" Valid="false" />
<Case Email="fred@som ewhere..org9" Valid="false" />
<Case Email="9Lives.c lub.org" Valid="false" />
<Case Email="@club.or g" Valid="false" />
<Case Email=".so***** @club.org" Valid="false" />
</TestList>
<Regexp>^([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])?)$</Regexp>
<!--
<Regexp>^(\w([\.\-\w]*\w)?)@(\w([\.\-\w]*\w)*\.\w([\.\-\w]*\w)?)$</Regexp> -
->
</Email.Validatio n.Input>
"Brian Davis" <br***@knowdotn et.com> wrote in message
news:On******** ******@tk2msftn gp13.phx.gbl...
Try this one out:
(?i)^((?<!P\.?\ s?O\.?\sBox).)+ (?<!P\.?\s?O\.? \sBox)$
The (?i) turns on the ignore case option and then the expression matches
the beginning of the string, followed by 1 or more characters that are not
preceded by P.O. Box, followed by the end of the string. The repeated
negative look-behind is there to make sure that a string containing only
"P.O. Box" is not matched.
Brian Davis
www.knowdotnet.com
"Bryce Budd" <bb***@fulltilt .com> wrote in message
news:0b******** *************** *****@phx.gbl.. . Hi all,
I am trying to use a regular expression validator to check
for the existence of PO Box in an address textbox. The
business rule is "No addresses with PO Boxes are allowed."
What I want to happen is the Regular Expression Validator
to return false only when the string contains PO Box.
Currently it is false even when a valid address exists.
I need this validation to occur on the client, hence the
Regular Expression Validator control.
Here's the RE: I'm using in the ValidationExpre ssion
property:
[^(P\.?\s?O\.?\s Box)+]
This currently matches (returns false/invalid) for:
smith road and smith po box road?
Any insight into the proper regular expression to achieve
my goal would be greatly appreciated.
Thanks in advance,
Bryce