Business Logic Toolkit for .NET
www.bltoolkit.net
|  Home   |  Download   |  Documentation   |  Discussions   |  License   |

  Source.Validation.RegExAttribute.cs

 
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 | RegexOptions.Compiled)
        {
        }

        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; } }

        [NonSerialized]
        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; }
        }
    }
}
 
© 2010 www.bltoolkit.net
support@bltoolkit.net