-
Notifications
You must be signed in to change notification settings - Fork 807
Expand file tree
/
Copy pathIPAddressOrHostnameAsRangeValidator.cs
More file actions
33 lines (26 loc) · 1.29 KB
/
IPAddressOrHostnameAsRangeValidator.cs
File metadata and controls
33 lines (26 loc) · 1.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using System.Globalization;
using System.Net;
using System.Text.RegularExpressions;
using System.Windows.Controls;
using NETworkManager.Localization.Resources;
using NETworkManager.Utilities;
namespace NETworkManager.Validators;
public class IPAddressOrHostnameAsRangeValidator : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
var input = (value as string)?.Trim();
if (string.IsNullOrEmpty(input))
return new ValidationResult(false, Strings.EnterValidHostnameOrIPAddress);
foreach (var item in input.Split(";"))
{
var localItem = item.Trim();
// Check if it is a valid IPv4 address like 192.168.0.1, a valid IPv6 address like "::1" or a valid hostname like "server-01" or "server-01.example.com"
var isValid = (IPAddress.TryParse(localItem, out var ipAddress) && ipAddress.AddressFamily is System.Net.Sockets.AddressFamily.InterNetwork or System.Net.Sockets.AddressFamily.InterNetworkV6) ||
Regex.IsMatch(localItem, RegexHelper.HostnameOrDomainRegex);
if (!isValid)
return new ValidationResult(false, Strings.EnterValidHostnameOrIPAddress);
}
return ValidationResult.ValidResult;
}
}