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