annotate Source/Validation/RegExAttribute.cs @ 6:11b6da379593

Исправлена странная ошибка при использовании OfType<...>().Where(...)
author cin
date Mon, 05 Dec 2016 05:50:52 +0300
parents f990fcb411a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 using System;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 using System.Text.RegularExpressions;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 namespace BLToolkit.Validation
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 public class RegExAttribute : ValidatorBaseAttribute
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 public RegExAttribute(string pattern)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 : this(pattern, RegexOptions.IgnorePatternWhitespace
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 #if !SILVERLIGHT
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 | RegexOptions.Compiled
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 )
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 public RegExAttribute(string pattern, RegexOptions options)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 _pattern = pattern;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 _options = options;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 public RegExAttribute(string pattern, string errorMessage)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 : this(pattern)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 ErrorMessage = errorMessage;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 public RegExAttribute(string pattern, RegexOptions options, string errorMessage)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 :this(pattern, options)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 ErrorMessage = errorMessage;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 [Obsolete("Use RegExAttribute.Pattern instead.")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 public string Value { get { return Pattern; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 private readonly string _pattern;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 public string Pattern { get { return _pattern; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 private readonly RegexOptions _options;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 public RegexOptions Options { get { return _options; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 #if !SILVERLIGHT
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 [NonSerialized]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 private Regex _validator;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 public Regex Validator
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 get
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 if (_validator == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 _validator = new Regex(_pattern, _options);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 return _validator;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 public override bool IsValid(ValidationContext context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 if (context.IsNull(context))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 return true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 Match match = Validator.Match(context.Value.ToString());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 return match.Success && match.Value == context.Value.ToString();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 public override string ErrorMessage
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 get { return base.ErrorMessage ?? "'{0}' format is not valid."; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 set { base.ErrorMessage = value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 }