Haga que la expresión regular no sea sensible a las mayúsculas y minúsculas en ASP.NET RegularExpressionValidator

Dada esta expresión regular: "^[0-9]*\s*(lbs|kg|kgs)$" ¿cómo hago que no distinga entre mayúsculas y minúsculas? Estoy tratando de usar esto en un validador de expresiones regulares .net, así que necesito especificar la insensibilidad de mayúsculas y minúsculas en el patrón.

No puedo usar RegexOptions programáticamente porque estoy especificando la expresión regular en un RegularExpressionValidator

Lo descubrí.

Mayúsculas y minúsculas: ^[0-9]\s(lbs|kg|kgs)$

Insensible a mayúsculas y minúsculas: (?i:^[0-9]\s(lbs|kg|kgs)$)

Creo que esto es específico de la implementación .NET de expresiones regulares. Por lo tanto, si usa esto en el CommonExpressionValidator, debe desactivar la validación del lado del cliente porque el analizador de expresiones regulares de JavaScript no reconocerá el token de ?i .

Use las Opciones de RegEx .

 Regex regExInsensitive = new Regex(@"^[0-9]\s(lbs|kg|kgs)$", RegexOptions.IgnoreCase); 

En otros idiomas, generalmente puede especificar un modificador RegEx después del final de Reg Ex; el modificador ‘sin distinción de mayúsculas’ es ‘i’:

En Perl:

 if($var =~ /^[0-9]\s(lbs|kg|kgs)$/i) { # the /i means case insensitive # ... } 

En PHP:

 if(preg_match("/^[0-9]\s(lbs|kg|kgs)$/i", $var)) { // ... } 

Sé que esto fue respondido hace mucho tiempo, y es el mejor conjunto de respuestas entre otras preguntas duplicadas. Aquí hay una alternativa que utiliza un Custom Validator, cuando realmente necesita insensibilidad a las mayúsculas y minúsculas del lado del servidor; y el enfoque superior / inferior [A-Za-z] char es demasiado.

Esto combina las otras respuestas, utilizando el objeto RegEx del lado del servidor y la syntax de JavaScript del lado del cliente.

CustomValidator:

  

Código detrás:

 protected void cvWeight_Validate(object sender, ServerValidateEventArgs args) { Regex re = new Regex(@"^[0-9]*\s*(lbs|kg|kgs)$", RegexOptions.IgnoreCase); args.IsValid = re.IsMatch(args.Value); } 

Función de validación del lado del cliente:

 function cvWeight_Validate(sender, args) { var reWeight = /^[0-9]*\s*(lbs|kg|kgs)$/i; args.IsValid = reWeight.test(args); } 

Esto funciona bien para mí, excepto cuando se utiliza un ValidationSummary. En la validación del lado del cliente, aparece el error * , pero no puedo mostrar el mensaje de error en el resumen. El resumen solo se muestra cuando se envía. Creo que se supone que debe mostrarse; Tengo una combinación de paneles de actualización y código heredado, que pueden ser problemas.

Lo más fácil aquí es simplemente modificar la expresión regular para

 ^[0-9]*\s*([lL][bB][sS]|[kK][gG][sS]?)$ 

Es horrible de leer, pero funcionará bien.

¿Podemos hacer que Regex no distinga entre mayúsculas y minúsculas en C # ? :

Establezca la opción en línea a través de la construcción de patrón (?i) oa través de RegexOptions.IgnoreCase param

¿Podemos hacer que Regex no distinga entre mayúsculas y minúsculas en JavaScript ? :

Establezca la syntax del indicador a través de / pattern / flags o la bandera insensible /REGEX/i

( Aparte ) ¿Podemos hacer que Regex no distinga entre mayúsculas y minúsculas en HTML5 Pattern Attribute ? : No

Como señala Chris R. Timmons en RegularExpressionValidator , no ignora el caso :

No hay propiedad en el control RegularExpressionValidator que permita establecer las opciones de expresiones regulares.

Si su control realiza validación tanto del lado del cliente como del lado del servidor, la expresión regular debe usar un subconjunto de la syntax de expresión regular que pueden ejecutarse tanto JS como .NET . En este caso, para hacer que un regex ignore el caso, es necesario usar un constructo de clase de caracteres como [a-zA-Z] para que coincida con los caracteres en mayúscula y minúscula.

Si su validación se realiza solo en el lado del servidor, puede usar la syntax de expresiones regulares .NET más poderosa. En este caso, puede colocar la opción (?i) al comienzo de la expresión regular para indicarle que ignore el caso.

Por lo tanto, si desea utilizar el validador de fábrica, está atascado con la solución de Geoff de utilizar juegos de caracteres como este: [aA]