Example #1
0
        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;
        }
Example #2
0
        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);
        }
Example #3
0
 public bool IsValid(string segment, UrlSegmentOptions options)
 {
     return(options == null?defaultRegexValidUrlChars.IsMatch(segment) : Regex.IsMatch(segment, $"^[{options.ValidCharacters}]+$"));
 }