40 lines
1.0 KiB
C#
40 lines
1.0 KiB
C#
using System.Text;
|
|
|
|
namespace Argus.Infrastructure;
|
|
|
|
public static class IdentifierUtility
|
|
{
|
|
public static string Normalize(string? value, string fallback)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(value))
|
|
{
|
|
return fallback;
|
|
}
|
|
|
|
var builder = new StringBuilder(value.Length);
|
|
var lastWasSeparator = false;
|
|
|
|
foreach (var character in value.Trim().ToLowerInvariant())
|
|
{
|
|
if (char.IsLetterOrDigit(character))
|
|
{
|
|
builder.Append(character);
|
|
lastWasSeparator = false;
|
|
continue;
|
|
}
|
|
|
|
if (character is '-' or '_' or '.')
|
|
{
|
|
if (!lastWasSeparator)
|
|
{
|
|
builder.Append(character);
|
|
lastWasSeparator = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
var normalized = builder.ToString().Trim('-', '_', '.');
|
|
return string.IsNullOrWhiteSpace(normalized) ? fallback : normalized;
|
|
}
|
|
}
|