diff options
| author | Bond-009 <bond.009@outlook.com> | 2026-05-06 20:49:19 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-05-06 20:49:19 +0200 |
| commit | 33ed52b8ee25e1fae4763a26337b838dc9782b26 (patch) | |
| tree | ee68da202f604eef267254ea8c689965098b1c3e /src/Jellyfin.Extensions/StringExtensions.cs | |
| parent | aa96ff42e616ecf5638a8f1e2e8459b94513c528 (diff) | |
| parent | d1ab428476f961426841a0561036c59c3b93878e (diff) | |
Merge branch 'master' into feature/season-provider-id-from-path
Diffstat (limited to 'src/Jellyfin.Extensions/StringExtensions.cs')
| -rw-r--r-- | src/Jellyfin.Extensions/StringExtensions.cs | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/Jellyfin.Extensions/StringExtensions.cs b/src/Jellyfin.Extensions/StringExtensions.cs index c7e8319f59..906efbcbcc 100644 --- a/src/Jellyfin.Extensions/StringExtensions.cs +++ b/src/Jellyfin.Extensions/StringExtensions.cs @@ -148,5 +148,30 @@ namespace Jellyfin.Extensions { return string.IsNullOrEmpty(text) ? text : text.AsSpan().LeftPart('\0').ToString(); } + + /// <summary> + /// Normalizes a string for comparison by removing diacritics, converting to lowercase, + /// replacing punctuation/special characters with spaces, and collapsing whitespace. + /// </summary> + /// <param name="value">The string to normalize.</param> + /// <returns>The normalized string, or the original if null/whitespace.</returns> + public static string GetCleanValue(this string value) + { + if (string.IsNullOrWhiteSpace(value)) + { + return value; + } + + // Remove diacritics and convert to lowercase + var cleaned = value.RemoveDiacritics().ToLowerInvariant(); + + // Replace all punctuation and special characters with spaces + cleaned = Regex.Replace(cleaned, @"[^\p{L}\p{N}\s]", " "); + + // Collapse multiple spaces into single space and trim + cleaned = Regex.Replace(cleaned, @"\s+", " ").Trim(); + + return cleaned; + } } } |
