41 lines
996 B
C#
41 lines
996 B
C#
using System.Text;
|
|
|
|
namespace Argus.Infrastructure;
|
|
|
|
public static class SlugUtility
|
|
{
|
|
public static string Normalize(string? value)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(value))
|
|
{
|
|
return string.Empty;
|
|
}
|
|
|
|
var builder = new StringBuilder(value.Length);
|
|
var lastWasHyphen = false;
|
|
|
|
foreach (var character in value.Trim().ToLowerInvariant())
|
|
{
|
|
if (char.IsLetterOrDigit(character))
|
|
{
|
|
builder.Append(character);
|
|
lastWasHyphen = false;
|
|
continue;
|
|
}
|
|
|
|
if (!lastWasHyphen)
|
|
{
|
|
builder.Append('-');
|
|
lastWasHyphen = true;
|
|
}
|
|
}
|
|
|
|
return builder.ToString().Trim('-');
|
|
}
|
|
|
|
public static bool IsValid(string? value) =>
|
|
!string.IsNullOrWhiteSpace(value) &&
|
|
value.Length <= 100 &&
|
|
string.Equals(value, Normalize(value), StringComparison.Ordinal);
|
|
}
|