Mercurial > pub > bltoolkit
diff Source/Validation/RegExAttribute.cs @ 0:f990fcb411a9
Копия текущей версии из github
author | cin |
---|---|
date | Thu, 27 Mar 2014 21:46:09 +0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Source/Validation/RegExAttribute.cs Thu Mar 27 21:46:09 2014 +0400 @@ -0,0 +1,76 @@ +using System; +using System.Text.RegularExpressions; + +namespace BLToolkit.Validation +{ + [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)] + public class RegExAttribute : ValidatorBaseAttribute + { + public RegExAttribute(string pattern) + : this(pattern, RegexOptions.IgnorePatternWhitespace +#if !SILVERLIGHT + | RegexOptions.Compiled +#endif + ) + { + } + + public RegExAttribute(string pattern, RegexOptions options) + { + _pattern = pattern; + _options = options; + } + + public RegExAttribute(string pattern, string errorMessage) + : this(pattern) + { + ErrorMessage = errorMessage; + } + + public RegExAttribute(string pattern, RegexOptions options, string errorMessage) + :this(pattern, options) + { + ErrorMessage = errorMessage; + } + + [Obsolete("Use RegExAttribute.Pattern instead.")] + public string Value { get { return Pattern; } } + + private readonly string _pattern; + public string Pattern { get { return _pattern; } } + + private readonly RegexOptions _options; + public RegexOptions Options { get { return _options; } } + +#if !SILVERLIGHT + [NonSerialized] +#endif + private Regex _validator; + public Regex Validator + { + get + { + if (_validator == null) + _validator = new Regex(_pattern, _options); + + return _validator; + } + } + + public override bool IsValid(ValidationContext context) + { + if (context.IsNull(context)) + return true; + + Match match = Validator.Match(context.Value.ToString()); + + return match.Success && match.Value == context.Value.ToString(); + } + + public override string ErrorMessage + { + get { return base.ErrorMessage ?? "'{0}' format is not valid."; } + set { base.ErrorMessage = value; } + } + } +}