public void Match_In_Different_Cultures_CriticalCases(string pattern, RegexOptions options, CultureInfo culture, string input, string match_expected) { Regex r = RegexHelpers.CreateRegexInCulture(pattern, options, culture); Match match = r.Match(input); Assert.Equal(match_expected, match.Value); }
public void TurkishI_Is_Differently_LowerUpperCased_In_Turkish_Culture_NonBacktracking() { var turkish = new CultureInfo("tr-TR"); string input = "I\u0131\u0130i"; // Use the input as the regex also // Ignore the Compiled option here because it is a noop in combination with NonBacktracking Regex cultInvariantRegex = RegexHelpers.CreateRegexInCulture(input, RegexHelpers.RegexOptionNonBacktracking | RegexOptions.IgnoreCase | RegexOptions.CultureInvariant, CultureInfo.InvariantCulture); Regex turkishRegex = RegexHelpers.CreateRegexInCulture(input, RegexHelpers.RegexOptionNonBacktracking | RegexOptions.IgnoreCase, turkish); Assert.True(cultInvariantRegex.IsMatch(input)); Assert.True(turkishRegex.IsMatch(input)); // <---------- This result differs from the result in the previous test!!! // As above and no surprises here // The regexes recognize different lowercase variants of different versions of i differently Assert.True(cultInvariantRegex.IsMatch(input.ToLowerInvariant())); Assert.False(cultInvariantRegex.IsMatch(input.ToLower(turkish))); Assert.False(turkishRegex.IsMatch(input.ToLowerInvariant())); Assert.True(turkishRegex.IsMatch(input.ToLower(turkish))); // The same holds symmetrically for ToUpper Assert.True(cultInvariantRegex.IsMatch(input.ToUpperInvariant())); Assert.False(cultInvariantRegex.IsMatch(input.ToUpper(turkish))); Assert.False(turkishRegex.IsMatch(input.ToUpperInvariant())); Assert.True(turkishRegex.IsMatch(input.ToUpper(turkish))); }
public void TurkishCulture_Handling_Of_IgnoreCase_NonBacktracking() { var turkish = new CultureInfo("tr-TR"); string input = "I\u0131\u0130i"; string pattern = "[H-J][\u0131-\u0140][\u0120-\u0130][h-j]"; Regex regex = RegexHelpers.CreateRegexInCulture(pattern, RegexOptions.IgnoreCase | RegexHelpers.RegexOptionNonBacktracking, turkish); // The pattern must trivially match the input because all of the letters fall in the given intervals // Ignoring case can only add more letters here -- not REMOVE letters Assert.True(regex.IsMatch(input)); }