diff --git a/src/Spring/Spring.Core/Validation/Validators/RegularExpressionValidator.cs b/src/Spring/Spring.Core/Validation/Validators/RegularExpressionValidator.cs index edd9192f..73920392 100644 --- a/src/Spring/Spring.Core/Validation/Validators/RegularExpressionValidator.cs +++ b/src/Spring/Spring.Core/Validation/Validators/RegularExpressionValidator.cs @@ -1,139 +1,149 @@ -#region License - -/* - * Copyright © 2002-2005 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#endregion - -#region Imports - -using System; -using System.Text.RegularExpressions; - -using Spring.Expressions; -using Spring.Util; - -#endregion - -namespace Spring.Validation -{ - /// - /// Validates that object matches specified regular expression. - /// - /// - ///

- /// The test expression must evaluate to a ; - /// otherwise, an exception is thrown. - ///

- ///
- /// Aleksandar Seovic - public class RegularExpressionValidator : BaseSimpleValidator - { - #region Fields - - private string expression = string.Empty; - private RegexOptions options; - - #endregion - - #region Constructors - - /// - /// Creates a new instance of the class. - /// - public RegularExpressionValidator() - { - } - - /// - /// Creates a new instance of the class. - /// - /// The expression to validate. - /// The expression that determines if this validator should be evaluated. - /// The regular expression to match against. - public RegularExpressionValidator(string test, string when, string expression) : base(test, when) - { - AssertUtils.ArgumentHasText(test, "test"); - this.expression = expression; - } - - /// - /// Creates a new instance of the class. - /// - /// The expression to validate. - /// The expression that determines if this validator should be evaluated. - /// The regular expression to match against. - public RegularExpressionValidator(IExpression test, IExpression when, string expression) : base(test, when) - { - AssertUtils.ArgumentNotNull(test, "test"); - this.expression = expression; - } - - #endregion - - #region Properties - - /// - /// The regular expression text to match against. - /// - /// The regular expression text. - public string Expression - { - get { return expression; } - set { expression = value; } - } - - /// - /// The for the regular expression evaluation. - /// - /// The regular expression evaluation options. - /// - public RegexOptions Options - { - get { return options; } - set { options = value; } - } - - #endregion - - /// - /// Validates an object. - /// - /// Object to validate. - /// - /// if the supplied - /// object is valid. - /// - /// - /// If the supplied is not a - /// - /// - protected override bool Validate(object objectToValidate) - { - string text = objectToValidate as string; - if (text == null) - { - throw new ArgumentException("Test for RegularExpressionValidator must evaluate to a string."); - } - if (!StringUtils.HasLength(text)) - { - return true; - } - Match match = Regex.Match(text, this.Expression, this.Options); - return match.Success && match.Index == 0 && match.Length == text.Length; - } - } +#region License + +/* + * Copyright © 2002-2005 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#endregion + +#region Imports + +using System; +using System.Text.RegularExpressions; + +using Spring.Expressions; +using Spring.Util; + +#endregion + +namespace Spring.Validation +{ + /// + /// Validates that object matches specified regular expression. + /// + /// + ///

+ /// The test expression must evaluate to a ; + /// otherwise, an exception is thrown. + ///

+ ///
+ /// Aleksandar Seovic + public class RegularExpressionValidator : BaseSimpleValidator + { + #region Fields + + private string expression = string.Empty; + private RegexOptions options; + + #endregion + + #region Constructors + + /// + /// Creates a new instance of the class. + /// + public RegularExpressionValidator() + { + } + + /// + /// Creates a new instance of the class. + /// + /// The expression to validate. + /// The expression that determines if this validator should be evaluated. + /// The regular expression to match against. + public RegularExpressionValidator(string test, string when, string expression) + : base(test, when) + { + AssertUtils.ArgumentHasText(test, "test"); + this.expression = expression; + } + + /// + /// Creates a new instance of the class. + /// + /// The expression to validate. + /// The expression that determines if this validator should be evaluated. + /// The regular expression to match against. + public RegularExpressionValidator(IExpression test, IExpression when, string expression) + : base(test, when) + { + AssertUtils.ArgumentNotNull(test, "test"); + this.expression = expression; + } + + #endregion + + #region Properties + + /// + /// The regular expression text to match against. + /// + /// The regular expression text. + public string Expression + { + get { return expression; } + set { expression = value; } + } + + /// + /// The for the regular expression evaluation. + /// + /// The regular expression evaluation options. + /// + public RegexOptions Options + { + get { return options; } + set { options = value; } + } + + #endregion + + /// + /// Validates an object. + /// + /// Object to validate. + /// + /// if the supplied + /// object is valid. + /// + /// + /// If the supplied is not a + /// + /// + protected override bool Validate(object objectToValidate) + { + string text = objectToValidate as string; + + if (text == null) + { + throw new ArgumentException("Test for RegularExpressionValidator must evaluate to a string."); + } + + if (!StringUtils.HasLength(text)) + { + return true; + } + + if (!StringUtils.HasLength(text.Trim()) && !StringUtils.HasLength(expression)) + { + return false; + } + + Match match = Regex.Match(text, this.Expression, this.Options); + return match.Success; + } + } } \ No newline at end of file diff --git a/test/Spring/Spring.Core.Tests/Validation/Validators/RegularExpressionValidatorTests.cs b/test/Spring/Spring.Core.Tests/Validation/Validators/RegularExpressionValidatorTests.cs index a1e393a3..a0eaa20a 100644 --- a/test/Spring/Spring.Core.Tests/Validation/Validators/RegularExpressionValidatorTests.cs +++ b/test/Spring/Spring.Core.Tests/Validation/Validators/RegularExpressionValidatorTests.cs @@ -79,7 +79,7 @@ namespace Spring.Validation.Validators [Test] public void CaseSensitiveStringMatching() { - RegularExpressionValidator validator = new RegularExpressionValidator("ToString()", "true", @"[A-Z][a-z]*"); + RegularExpressionValidator validator = new RegularExpressionValidator("ToString()", "true", @"^[A-Z]([a-z]{1})"); Assert.IsTrue(validator.Validate("Aleksandar", new ValidationErrors())); Assert.IsFalse(validator.Validate("ALEKSANDAR", new ValidationErrors())); Assert.IsFalse(validator.Validate("aleksandar", new ValidationErrors())); @@ -118,5 +118,14 @@ namespace Spring.Validation.Validators Assert.IsTrue(valid, "Validation should succeed when regex validator is not evaluated."); } + [Test] + public void Test() + { + RegularExpressionValidator validator = new RegularExpressionValidator(); + validator.Expression = "^[A-Za-z]"; + Assert.True(validator.Validate("hello", new ValidationErrors())); + + } + } } \ No newline at end of file