91 أسطر
2.8 KiB
C#
91 أسطر
2.8 KiB
C#
using System;
|
|
using System.Net;
|
|
using System.Text.RegularExpressions;
|
|
|
|
namespace Pingerino.Utilities
|
|
{
|
|
public static class ValidationHelper
|
|
{
|
|
private static readonly Regex IpAddressRegex = new Regex(
|
|
@"^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$",
|
|
RegexOptions.Compiled);
|
|
|
|
private static readonly Regex HostnameRegex = new Regex(
|
|
@"^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)*[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$",
|
|
RegexOptions.Compiled);
|
|
|
|
public static bool IsValidIpAddress(string ipAddress)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(ipAddress))
|
|
return false;
|
|
|
|
return IPAddress.TryParse(ipAddress, out _) || IpAddressRegex.IsMatch(ipAddress);
|
|
}
|
|
|
|
public static bool IsValidHostname(string hostname)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(hostname))
|
|
return false;
|
|
|
|
if (hostname.Length > 253)
|
|
return false;
|
|
|
|
return HostnameRegex.IsMatch(hostname);
|
|
}
|
|
|
|
public static bool IsValidIpAddressOrHostname(string address)
|
|
{
|
|
return IsValidIpAddress(address) || IsValidHostname(address);
|
|
}
|
|
|
|
public static bool IsValidPingInterval(string intervalText, out int interval)
|
|
{
|
|
interval = 0;
|
|
|
|
if (string.IsNullOrWhiteSpace(intervalText))
|
|
return false;
|
|
|
|
if (!int.TryParse(intervalText, out interval))
|
|
return false;
|
|
|
|
return interval >= 100 && interval <= 60000; // 100ms to 60 seconds
|
|
}
|
|
|
|
public static bool IsValidPingInterval(int interval)
|
|
{
|
|
return interval >= 100 && interval <= 60000;
|
|
}
|
|
|
|
public static string SanitizeInput(string input)
|
|
{
|
|
if (string.IsNullOrEmpty(input))
|
|
return string.Empty;
|
|
|
|
return input.Trim();
|
|
}
|
|
|
|
public static string GetValidationErrorMessage(string fieldName, string value)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(value))
|
|
return $"{fieldName} cannot be empty.";
|
|
|
|
switch (fieldName.ToLower())
|
|
{
|
|
case "ip address":
|
|
case "ipaddress":
|
|
if (!IsValidIpAddressOrHostname(value))
|
|
return "Please enter a valid IP address or hostname.";
|
|
break;
|
|
|
|
case "interval":
|
|
case "ping interval":
|
|
if (!IsValidPingInterval(value, out _))
|
|
return "Ping interval must be between 100 and 60000 milliseconds.";
|
|
break;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}
|
|
}
|