Udostępnij za pośrednictwem


Wzorce wyrażeń regularnych z poprawionymi zakresami

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 tej usterki może spowodować zmianę powodującą niezgodność, jeśli wyrażenie regularne zawiera usterkę ukrytą z powodu tej usterki lub jeśli zaimplementowano obejście 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);

Wprowadzona wersja

.NET 7

Typ zmiany powodującej niezgodność

Ta zmiana jest zmianą behawioralną.

Przyczyna wprowadzenia zmiany

Poprzednie zachowanie było nieprawidłowe.

Jeśli wyrażenie regularne zawiera ukrytą usterkę, napraw ją. Jeśli wystąpiło obejście tego błędu, możesz usunąć obejście problemu.

Dotyczy interfejsów API