SPRNET-1122
-change behavior of RegularExpressionValidator.Validate(...) method to depend almost entirely on the regex match in re: its boolean return
This commit is contained in:
@@ -1,139 +1,149 @@
|
|||||||
#region License
|
#region License
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright <20> 2002-2005 the original author or authors.
|
* Copyright <20> 2002-2005 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
* You may obtain a copy of the License at
|
* You may obtain a copy of the License at
|
||||||
*
|
*
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
*
|
*
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Imports
|
#region Imports
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
using Spring.Expressions;
|
using Spring.Expressions;
|
||||||
using Spring.Util;
|
using Spring.Util;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
namespace Spring.Validation
|
namespace Spring.Validation
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Validates that object matches specified regular expression.
|
/// Validates that object matches specified regular expression.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <remarks>
|
/// <remarks>
|
||||||
/// <p>
|
/// <p>
|
||||||
/// The test expression must evaluate to a <see cref="System.String"/>;
|
/// The test expression must evaluate to a <see cref="System.String"/>;
|
||||||
/// otherwise, an exception is thrown.
|
/// otherwise, an exception is thrown.
|
||||||
/// </p>
|
/// </p>
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
/// <author>Aleksandar Seovic</author>
|
/// <author>Aleksandar Seovic</author>
|
||||||
public class RegularExpressionValidator : BaseSimpleValidator
|
public class RegularExpressionValidator : BaseSimpleValidator
|
||||||
{
|
{
|
||||||
#region Fields
|
#region Fields
|
||||||
|
|
||||||
private string expression = string.Empty;
|
private string expression = string.Empty;
|
||||||
private RegexOptions options;
|
private RegexOptions options;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates a new instance of the <see cref="RegularExpressionValidator"/> class.
|
/// Creates a new instance of the <see cref="RegularExpressionValidator"/> class.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public RegularExpressionValidator()
|
public RegularExpressionValidator()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates a new instance of the <see cref="RegularExpressionValidator"/> class.
|
/// Creates a new instance of the <see cref="RegularExpressionValidator"/> class.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="test">The expression to validate.</param>
|
/// <param name="test">The expression to validate.</param>
|
||||||
/// <param name="when">The expression that determines if this validator should be evaluated.</param>
|
/// <param name="when">The expression that determines if this validator should be evaluated.</param>
|
||||||
/// <param name="expression">The regular expression to match against.</param>
|
/// <param name="expression">The regular expression to match against.</param>
|
||||||
public RegularExpressionValidator(string test, string when, string expression) : base(test, when)
|
public RegularExpressionValidator(string test, string when, string expression)
|
||||||
{
|
: base(test, when)
|
||||||
AssertUtils.ArgumentHasText(test, "test");
|
{
|
||||||
this.expression = expression;
|
AssertUtils.ArgumentHasText(test, "test");
|
||||||
}
|
this.expression = expression;
|
||||||
|
}
|
||||||
/// <summary>
|
|
||||||
/// Creates a new instance of the <see cref="RegularExpressionValidator"/> class.
|
/// <summary>
|
||||||
/// </summary>
|
/// Creates a new instance of the <see cref="RegularExpressionValidator"/> class.
|
||||||
/// <param name="test">The expression to validate.</param>
|
/// </summary>
|
||||||
/// <param name="when">The expression that determines if this validator should be evaluated.</param>
|
/// <param name="test">The expression to validate.</param>
|
||||||
/// <param name="expression">The regular expression to match against.</param>
|
/// <param name="when">The expression that determines if this validator should be evaluated.</param>
|
||||||
public RegularExpressionValidator(IExpression test, IExpression when, string expression) : base(test, when)
|
/// <param name="expression">The regular expression to match against.</param>
|
||||||
{
|
public RegularExpressionValidator(IExpression test, IExpression when, string expression)
|
||||||
AssertUtils.ArgumentNotNull(test, "test");
|
: base(test, when)
|
||||||
this.expression = expression;
|
{
|
||||||
}
|
AssertUtils.ArgumentNotNull(test, "test");
|
||||||
|
this.expression = expression;
|
||||||
#endregion
|
}
|
||||||
|
|
||||||
#region Properties
|
#endregion
|
||||||
|
|
||||||
/// <summary>
|
#region Properties
|
||||||
/// The regular expression <b>text</b> to match against.
|
|
||||||
/// </summary>
|
/// <summary>
|
||||||
/// <value>The regular expression <b>text</b>.</value>
|
/// The regular expression <b>text</b> to match against.
|
||||||
public string Expression
|
/// </summary>
|
||||||
{
|
/// <value>The regular expression <b>text</b>.</value>
|
||||||
get { return expression; }
|
public string Expression
|
||||||
set { expression = value; }
|
{
|
||||||
}
|
get { return expression; }
|
||||||
|
set { expression = value; }
|
||||||
/// <summary>
|
}
|
||||||
/// The <see cref="RegexOptions"/> for the regular expression evaluation.
|
|
||||||
/// </summary>
|
/// <summary>
|
||||||
/// <value>The regular expression evaluation options.</value>
|
/// The <see cref="RegexOptions"/> for the regular expression evaluation.
|
||||||
/// <seealso cref="RegexOptions"/>
|
/// </summary>
|
||||||
public RegexOptions Options
|
/// <value>The regular expression evaluation options.</value>
|
||||||
{
|
/// <seealso cref="RegexOptions"/>
|
||||||
get { return options; }
|
public RegexOptions Options
|
||||||
set { options = value; }
|
{
|
||||||
}
|
get { return options; }
|
||||||
|
set { options = value; }
|
||||||
#endregion
|
}
|
||||||
|
|
||||||
/// <summary>
|
#endregion
|
||||||
/// Validates an object.
|
|
||||||
/// </summary>
|
/// <summary>
|
||||||
/// <param name="objectToValidate">Object to validate.</param>
|
/// Validates an object.
|
||||||
/// <returns>
|
/// </summary>
|
||||||
/// <see lang="true"/> if the supplied <paramref name="objectToValidate"/>
|
/// <param name="objectToValidate">Object to validate.</param>
|
||||||
/// object is valid.
|
/// <returns>
|
||||||
/// </returns>
|
/// <see lang="true"/> if the supplied <paramref name="objectToValidate"/>
|
||||||
/// <exception cref="System.ArgumentException">
|
/// object is valid.
|
||||||
/// If the supplied <paramref name="objectToValidate"/> is not a
|
/// </returns>
|
||||||
/// <see cref="System.String"/>
|
/// <exception cref="System.ArgumentException">
|
||||||
/// </exception>
|
/// If the supplied <paramref name="objectToValidate"/> is not a
|
||||||
protected override bool Validate(object objectToValidate)
|
/// <see cref="System.String"/>
|
||||||
{
|
/// </exception>
|
||||||
string text = objectToValidate as string;
|
protected override bool Validate(object objectToValidate)
|
||||||
if (text == null)
|
{
|
||||||
{
|
string text = objectToValidate as string;
|
||||||
throw new ArgumentException("Test for RegularExpressionValidator must evaluate to a string.");
|
|
||||||
}
|
if (text == null)
|
||||||
if (!StringUtils.HasLength(text))
|
{
|
||||||
{
|
throw new ArgumentException("Test for RegularExpressionValidator must evaluate to a string.");
|
||||||
return true;
|
}
|
||||||
}
|
|
||||||
Match match = Regex.Match(text, this.Expression, this.Options);
|
if (!StringUtils.HasLength(text))
|
||||||
return match.Success && match.Index == 0 && match.Length == text.Length;
|
{
|
||||||
}
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!StringUtils.HasLength(text.Trim()) && !StringUtils.HasLength(expression))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Match match = Regex.Match(text, this.Expression, this.Options);
|
||||||
|
return match.Success;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -79,7 +79,7 @@ namespace Spring.Validation.Validators
|
|||||||
[Test]
|
[Test]
|
||||||
public void CaseSensitiveStringMatching()
|
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.IsTrue(validator.Validate("Aleksandar", new ValidationErrors()));
|
||||||
Assert.IsFalse(validator.Validate("ALEKSANDAR", new ValidationErrors()));
|
Assert.IsFalse(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.");
|
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()));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user