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.EmailValidation {
/// <remarks>
/// Represents all the input for the test, including the regex to test,
/// and an array of test cases.
/// </remarks>
[System.Xml.Serialization.XmlRootAttribute("Email.V alidation.Input",
Namespace="", IsNullable=false)]
public class TestInput {
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form= System.Xml.Schema.XmlSche
maForm.Unqualified)]
public string Regexp;
/// <remarks/>
[System.Xml.Serialization.XmlArrayAttribute(Form=Sy stem.Xml.Schema.XmlSchema
Form.Unqualified)]
[System.Xml.Serialization.XmlArrayItemAttribute("Ca se",
Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=false)]
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.Serialization.XmlAttribute("Email",
Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public string Input;
/// <remarks/>
[System.Xml.Serialization.XmlAttribute("Valid",
Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
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= "EmailValidationInput.xml";
System.IO.FileStream fs = new System.IO.FileStream(InputPath,
System.IO.FileMode.Open);
System.Xml.Serialization.XmlSerializer s= new
System.Xml.Serialization.XmlSerializer(typeof(Test Input));
TestInput Input= (TestInput) s.Deserialize(fs);
fs.Close();
System.Text.RegularExpressions.Regex regex= new
System.Text.RegularExpressions.Regex (Input.Regexp);
foreach (TestCase tc in Input.TestList) {
System.Console.WriteLine(tc.Input +"\n " + tc.ExpectedOutput + " \\ " +
regex.IsMatch(tc.Input));
}
}
}
}
// This is input data. Store this in the XML file that is de-serialized for
this test.
<Email.Validation.Input>
<TestList>
<!--
================================================== ================ -->
<!-- =================== True test cases
============================== -->
<!--
================================================== ================ -->
<Case Email="Ro***@rabbit.com" Valid="true" />
<Case
Email="th*********************************@somethi ng.org"
Valid="true" />
<Case Email="th*******@something.9g" Valid="true" />
<Case Email="th*******@place.org" Valid="true" />
<Case Email="We***********@cornell.edu" 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****@club.org" Valid="true" />
<Case Email="fr**@somewhere.org9" Valid="true" />
<Case Email="f@z.k" Valid="true" />
<Case Email="_e***@sesame.org" Valid="true" />
<Case Email="Ha**********@Hogwarts.edu" Valid="true" />
<Case
Email="Pr************************@Faculty.Hogwarts .edu"
Valid="true" />
<!--
================================================== ================ -->
<!-- =================== False="test cases
============================= -->
<!--
================================================== ================ -->
<Case Email="-e***@sesame.org" Valid="false"/>
<Case Email="el**@sesame.org." Valid="false" />
<Case Email="-e***@sesame.org." Valid="false" />
<Case Email="elmo@.org." Valid="false" />
<Case Email="elmo@.org" Valid="false" />
<Case Email="elmo@.someplace.org" Valid="false" />
<Case Email="elmo@cloud9" Valid="false" />
<Case Email="fred.@somewhere.org9" Valid="false" />
<Case Email="fred@somewhere..org9" Valid="false" />
<Case Email="9Lives.club.org" Valid="false" />
<Case Email="@club.org" 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.Validation.Input>
"Brian Davis" <br***@knowdotnet.com> wrote in message
news:On**************@tk2msftngp13.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 ValidationExpression
property:
[^(P\.?\s?O\.?\sBox)+]
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