Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Funkcja Regex niepoprawnie obsługuje wielkość liter niektórych zakresów w programie .NET Framework i na platformie .NET 6 i starszych wersjach. Ta usterka została usunięta na platformie .NET 7.
Poprawka tego błędu może spowodować problemy z kompatybilnością, jeśli twoje wyrażenie regularne zawierało błąd ukryty z powodu tego problemu albo jeżeli zaimplementowałeś obejście dla tego błędu.
Poprzednie zachowanie
W przypadku platformy .NET 6 i starszych wersji następujące dwa wzorce generują różne wyniki. Powinny jednak wygenerować ten sam wynik (false
), ponieważ zakres \xD7-\xD8
zawiera tylko wartości \xD7
i \xD8
same.
// Evaluates to false.
Regex.IsMatch("\xF7", @"^(?i:[\xD7\xD8])$", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
// Evaluates to true.
Regex.IsMatch("\xF7", @"^(?i:[\xD7-\xD8])$", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
Nowe zachowanie
Począwszy od platformy .NET 7, przykładowe wzorce są obliczane na wartość false
.
// Evaluates to false.
Regex.IsMatch("\xF7", @"^(?i:[\xD7\xD8])$", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
// Evaluates to false.
Regex.IsMatch("\xF7", @"^(?i:[\xD7-\xD8])$", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
Wersja wprowadzona
.NET 7
Typ zmiany przełamującej
Ta zmiana jest zmianą behawioralną.
Przyczyna zmiany
Poprzednie zachowanie było nieprawidłowe.
Zalecana akcja
Jeśli wyrażenie regularne zawiera ukrytą usterkę, napraw ją. Jeśli znalazłeś obejście tego błędu, możesz je usunąć.
Interfejsy API, których dotyczy problem
- System.Text.RegularExpressions.Regex.Count
- System.Text.RegularExpressions.Regex.EnumerateMatches
- System.Text.RegularExpressions.Regex.IsMatch
- System.Text.RegularExpressions.Regex.Match
- System.Text.RegularExpressions.Regex.Matches
- System.Text.RegularExpressions.Regex.Replace
- System.Text.RegularExpressions.Regex.Split