Patrones de regex con rangos corregidos

Regex controla incorrectamente el uso de mayúsculas y minúsculas de algunos intervalos en .NET Framework y en .NET 6 y versiones anteriores. Este error se corrigió en .NET 7.

La corrección de este error podría provocar un cambio importante si la expresión regular tiene un error que se ocultó a consecuencia de este o si implementó una solución alternativa para este error.

Comportamiento anterior

En .NET 6 y versiones anteriores, los dos patrones siguientes generan resultados diferentes. Sin embargo, deben producir el mismo resultado (false), ya que el intervalo \xD7-\xD8 solo incluye los valores \xD7 y \xD8 propiamente dichos.

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

Comportamiento nuevo

A partir de .NET 7, los patrones de ejemplo se evalúan como 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);

Versión introducida

.NET 7

Tipo de cambio importante

Este es un cambio de comportamiento.

Motivo del cambio

El comportamiento anterior era incorrecto.

Si la expresión regular tiene un error oculto, corrijalo. Si tiene una solución alternativa para este error, puede quitarla.

API afectadas