diff --git a/.editorconfig b/.editorconfig
index a556da0..b8535d2 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -10,7 +10,6 @@ indent_style = space
# Code files
[*.{cs,csx}]
indent_size = 4
-end_of_line = lf
# XML project files
[*.{csproj,vbproj,vcxproj,vcxproj.filters,proj,projitems,shproj}]
diff --git a/src/TypeGuard.Core/Rules/IpAddressRules.cs b/src/TypeGuard.Core/Rules/IpAddressRules.cs
index bbfcea4..98ccab4 100644
--- a/src/TypeGuard.Core/Rules/IpAddressRules.cs
+++ b/src/TypeGuard.Core/Rules/IpAddressRules.cs
@@ -37,17 +37,8 @@ public class PrivateIpRule(string? customMessage = null) : IValidatorRule
public bool IsValid(IPAddress value)
{
- if (value.AddressFamily != AddressFamily.InterNetwork)
- {
- return false;
- }
-
- byte[] b = value.GetAddressBytes();
-
- return b[0] == 10
- || b[0] == 172 && b[1] >= 16 && b[1] <= 31
- || b[0] == 192 && b[1] == 168
- || b[0] == 169 && b[1] == 254;
+ return value.AddressFamily == AddressFamily.InterNetwork
+ && IpAddressHelper.IsPrivateIpv4(value.GetAddressBytes());
}
///
@@ -124,24 +115,11 @@ public class PublicIpRule(string? customMessage = null) : IValidatorRule
public bool IsValid(IPAddress value)
{
- if (IPAddress.IsLoopback(value))
- {
- return false;
- }
-
- if (value.AddressFamily != AddressFamily.InterNetwork)
- {
- return true;
- }
-
- byte[] b = value.GetAddressBytes();
-
- return !(
- b[0] == 10
- || b[0] == 172 && b[1] >= 16 && b[1] <= 31
- || b[0] == 192 && b[1] == 168
- || b[0] == 169 && b[1] == 254
- );
+ return !IPAddress.IsLoopback(value)
+ && (
+ value.AddressFamily != AddressFamily.InterNetwork
+ || !IpAddressHelper.IsPrivateIpv4(value.GetAddressBytes())
+ );
}
///
@@ -285,3 +263,16 @@ private static HashSet BuildSet(IEnumerable values, string
return set.Count == 0 ? throw new ArgumentException("Cannot be empty.", paramName) : set;
}
}
+
+internal static class IpAddressHelper
+{
+ internal static bool IsPrivateIpv4(byte[] addressBytes)
+ {
+ bool is10Range = addressBytes[0] == 10;
+ bool is172Range = addressBytes[0] == 172 && addressBytes[1] >= 16 && addressBytes[1] <= 31;
+ bool is192Range = addressBytes[0] == 192 && addressBytes[1] == 168;
+ bool isApipaRange = addressBytes[0] == 169 && addressBytes[1] == 254;
+
+ return is10Range || is172Range || is192Range || isApipaRange;
+ }
+}