/Source/NETworkManager.Validators/IPv4IPv6SubnetmaskOrCIDRValidator.cs

https://github.com/BornToBeRoot/NETworkManager · C# · 33 lines · 25 code · 7 blank · 1 comment · 11 complexity · fce409f7c1fc2ffa31aaa1ee4d9feb3c MD5 · raw file

  1. using System.Globalization;
  2. using System.Text.RegularExpressions;
  3. using System.Windows.Controls;
  4. using NETworkManager.Utilities;
  5. namespace NETworkManager.Validators
  6. {
  7. // ReSharper disable once InconsistentNaming
  8. public class IPv4IPv6SubnetmaskOrCIDRValidator : ValidationRule
  9. {
  10. public override ValidationResult Validate(object value, CultureInfo cultureInfo)
  11. {
  12. if (value == null)
  13. return new ValidationResult(false, Localization.Resources.Strings.EnterValidSubnetmaskOrCIDR);
  14. var subnetmaskOrCidr = value as string;
  15. if (subnetmaskOrCidr != null && Regex.IsMatch(subnetmaskOrCidr, RegexHelper.SubnetmaskRegex))
  16. return ValidationResult.ValidResult;
  17. if (subnetmaskOrCidr == null || !subnetmaskOrCidr.StartsWith("/"))
  18. return new ValidationResult(false, Localization.Resources.Strings.EnterValidSubnetmaskOrCIDR);
  19. if (!int.TryParse(subnetmaskOrCidr.TrimStart('/'), out var cidr))
  20. return new ValidationResult(false, Localization.Resources.Strings.EnterValidSubnetmaskOrCIDR);
  21. if (cidr >= 0 && cidr < 129)
  22. return ValidationResult.ValidResult;
  23. return new ValidationResult(false, Localization.Resources.Strings.EnterValidSubnetmaskOrCIDR);
  24. }
  25. }
  26. }