已更正範圍的 Regex 模式

Regex 在 .NET Framework 和 .NET 6 和舊版中,不正確地處理某些範圍的大小寫。 .NET 7 中已修正此錯誤。

如果規則運算式有因為這個錯誤而隱藏的錯誤,或如果您實作因應措施來解決此錯誤,則此錯誤的修正可能會造成中斷性變更。

先前的行為

在 .NET 6 和舊版中,下列兩種模式會產生不同的結果。 不過,它們應該產生相同的結果 (false),因為範圍 \xD7-\xD8 只包含值 \xD7\xD8 本身。

// 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);

新的行為

從 .NET 7 開始,範例模式都會評估為 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);

導入的版本

.NET 7

中斷性變更的類型

此變更為行為變更

變更原因

先前的行為不正確。

如果規則運算式有隱藏的錯誤,請加以修正。 如果您有此錯誤的因應措施,您可以移除該因應措施。

受影響的 API