public TransliteratingUrlSegmentGenerator(UrlSegmentOptions urlSegmentOptions) { urlSegmentOptions = urlSegmentOptions ?? new UrlSegmentOptions(); defaultRegexValidUrlChars = new Regex($"^[{urlSegmentOptions.ValidCharacters}]+$", RegexOptions.Compiled); var defaultRegexFindInvalidUrlChars = new Regex($"[^{urlSegmentOptions.ValidCharacters}]{{1}}", RegexOptions.Compiled); defaultFindInvalidUrlMethod = s => defaultRegexFindInvalidUrlChars.Matches(s); defaultOptions = urlSegmentOptions; }
public string Create(string proposedSegment, UrlSegmentOptions options) { var segmentOption = options ?? defaultOptions; var charMap = segmentOption.CharacterMap; var invalidCharRegex = options != null ? (s => Regex.Matches(s, $"[^{options.ValidCharacters}]{{1}}")) : defaultFindInvalidUrlMethod; var cleanedSegment = ReplaceIllegalNames(ReplaceIllegalChars(Transliterate(proposedSegment), invalidCharRegex, charMap)); while (cleanedSegment.Contains("--")) { cleanedSegment = cleanedSegment.Replace("--", "-"); } while (cleanedSegment.EndsWith(".") || cleanedSegment.EndsWith("-")) { cleanedSegment = cleanedSegment.Substring(0, cleanedSegment.Length - 1); } if (segmentOption.UseLowercase) { return(cleanedSegment.ToLowerInvariant()); } return(cleanedSegment); }
public bool IsValid(string segment, UrlSegmentOptions options) { return(options == null?defaultRegexValidUrlChars.IsMatch(segment) : Regex.IsMatch(segment, $"^[{options.ValidCharacters}]+$")); }