2009-10-13 5 views
39

Obtengo "valor constante de la mala compilación" en esta declaración.Valor constante de la mala compilación

Regex objCheckNumber = new Regex("^(\d){4}$"); 

Simplemente quiero configurar esto para verificar otra cadena para ver si el valor ingresado es de 4 dígitos.

Respuesta

70

C# está tratando de interpretar \d como una secuencia de escape, y \d es no una secuencia de escape válida (pero \n y \t son , por ejemplo). Puede duplicar las barras invertidas para escapar ("^(\\d){4}$"), o puede prefijar la cadena constante con un signo al: @"^(\d){4}$".

+1

-1: \ d = dígito numérico único en C# /. NET regex –

+0

gracias, completamente pasado por alto probablemente porque estaba pensando demasiado en el Regex y es una cadena duh. – PositiveGuy

+0

whoops, no quise subir el comentario de los psiquicos. – PositiveGuy

8

C# usa \ como un carácter de escape. Necesita duplicar el \ al \\.

alternativa, coloque un carácter @ antes de la doble cita:

new Regex(@"^(\d){4}$") 
+0

El \ escapes d lo que significa carácter numérico simple. Con {4} él está buscando cuatro de ellos en una fila. –

+2

@pasasik - sí, \ d tiene un significado especial para el motor de expresiones regulares, pero primero debe obtener esa cadena para el motor de expresiones regulares. Sin duplicarlo o usar @, el compilador de C# cree que quiere decir \ d como un carácter 'especial' (como \ t o \ n) y trata (y falla) de manejarlo. –

+0

estoy probando en RegexHero: http://regexhero.net/tester/ y ... jeesh. veo mi error (Perdón por el codificador binario de downvote, SO no me deja revertirlo ...) –

Cuestiones relacionadas