2009-10-13 16 views
39

Otrzymuję "Zła wartość kompilacji" na tym oświadczeniu.Zła kompilacja stała wartość

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

Po prostu chcę ustawić, aby sprawdzić inny ciąg, aby sprawdzić, czy wprowadzona wartość ma 4 cyfry.

Odpowiedz

70

C# próbuje interpretować \d jak sekwencja ucieczki, a \d jest nie prawidłową sekwencję ucieczki (ale \n i \t są , na przykład). Możesz podwoić ukośniki odwrotne, aby się z niego wydostać ("^(\\d){4}$"), lub możesz poprzedzić stały ciąg znakiem at: @"^(\d){4}$".

+1

-1: \ d = pojedyncza cyfra w C#/.NET regex –

+0

dzięki, całkowicie przeoczyłem to prawdopodobnie dlatego, że myślałem za dużo o regex i jest to ciąg duh. – PositiveGuy

+0

whoops, nie zamierzałem komentować psasików. – PositiveGuy

8

C# używa \ jako znak ucieczki. Musisz podwoić wartość \ na \\.

Alternatywnie, umieścić znak @ przed cudzysłów:

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

\ escute the d, co oznacza pojedynczy znak numeryczny. Z {4} szuka czterech z nich z rzędu. –

+2

@pasasik - tak, \ d ma specjalne znaczenie dla silnika regex, ale najpierw musisz pobrać ten ciąg do silnika regex. Bez podwojenia go lub użycia @ kompilator C# uważa, że ​​masz na myśli \ d jako "specjalny" znak (np. \ T lub \ n) i próbuje (i nie powiedzie się), aby sobie z tym poradzić. –

+0

Testuję w RegexHero: http://regexhero.net/tester/ i ... jeesh. widzę mój błąd. (Przepraszam za downlight binarycoder, SO nie pozwolił mi tego odwrócić ...) –