2
0

NullableStringValidator.cs 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. //
  2. // NullableStringValidator.cs
  3. //
  4. // Authors:
  5. // Atsushi Enomoto ([email protected])
  6. // Lluis Sanchez Gual ([email protected])
  7. //
  8. // Permission is hereby granted, free of charge, to any person obtaining
  9. // a copy of this software and associated documentation files (the
  10. // "Software"), to deal in the Software without restriction, including
  11. // without limitation the rights to use, copy, modify, merge, publish,
  12. // distribute, sublicense, and/or sell copies of the Software, and to
  13. // permit persons to whom the Software is furnished to do so, subject to
  14. // the following conditions:
  15. //
  16. // The above copyright notice and this permission notice shall be
  17. // included in all copies or substantial portions of the Software.
  18. //
  19. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  20. // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  21. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  22. // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
  23. // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  24. // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  25. // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  26. //
  27. // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
  28. //
  29. // copied StringValidator.cs and changed class name and just one line
  30. // in Validate() (see there).
  31. #if NET_2_0
  32. namespace System.Configuration
  33. {
  34. internal class NullableStringValidator: ConfigurationValidatorBase
  35. {
  36. char[] invalidCharacters;
  37. int maxLength;
  38. int minLength;
  39. public NullableStringValidator (int minLength)
  40. {
  41. this.minLength = minLength;
  42. maxLength = int.MaxValue;
  43. }
  44. public NullableStringValidator (int minLength, int maxLength)
  45. {
  46. this.minLength = minLength;
  47. this.maxLength = maxLength;
  48. }
  49. public NullableStringValidator (int minLength, int maxLength, string invalidCharacters)
  50. {
  51. this.minLength = minLength;
  52. this.maxLength = maxLength;
  53. if (invalidCharacters != null)
  54. this.invalidCharacters = invalidCharacters.ToCharArray ();
  55. }
  56. public override bool CanValidate (Type type)
  57. {
  58. return type == typeof(string);
  59. }
  60. public override void Validate (object value)
  61. {
  62. // This is the only difference from StringValidator:
  63. // null value is always allowed.
  64. if (value == null)
  65. return;
  66. string s = (string) value;
  67. if (s == null || s.Length < minLength)
  68. throw new ArgumentException ("The string must be at least " + minLength + " characters long.");
  69. if (s.Length > maxLength)
  70. throw new ArgumentException ("The string must be no more than " + maxLength + " characters long.");
  71. if (invalidCharacters != null) {
  72. int i = s.IndexOfAny (invalidCharacters);
  73. if (i != -1)
  74. throw new ArgumentException (String.Format ("The string cannot contain any of the following characters: '{0}'.", invalidCharacters));
  75. }
  76. }
  77. }
  78. }
  79. #endif