Bad Compile константа

Я получаю «Значение константы плохой компиляции» в этом утверждении.

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

Я просто хочу установить это, чтобы проверить другую строку, чтобы увидеть, если введенное значение составляет 4 цифры.

38 c#
13.10.2009 03:26:23
2 ОТВЕТА
РЕШЕНИЕ

C # пытается интерпретировать \dкак последовательность эвакуации, и \dэто не является допустимым последовательность выхода (но \nи \t, например). Вы можете удвоить обратный слэш , чтобы избежать его ( "^(\\d){4}$"), или вы можете предварить постоянную строку с при-знака: @"^(\d){4}$".

72
13.10.2009 03:29:36
спасибо, полностью пропустил это, вероятно, потому что я слишком много думал о регулярном выражении, и это строка дух.
PositiveGuy 13.10.2009 03:40:53
упс, не хотел до псасик комментировать.
PositiveGuy 13.10.2009 03:42:07
@psasik: очевидно, \dимеет значение в регулярном выражении, но не содержит значения в обычной строке. В качестве входных данных для регулярного выражения \dиспользуются два символа, тогда как в обычной строке, \nи \tинтерпретируются как один символ.
Mark Rushakoff 13.10.2009 03:43:07
Не волнуйся, Марк. Некоторые из нас обращают внимание сегодня вечером.
Joel Coehoorn 13.10.2009 03:59:17

C # использует \ как escape-символ. Вы должны удвоить вверх по \к \\.

В качестве альтернативы, поместите символ @ перед двойной кавычкой:

new Regex(@"^(\d){4}$")
8
13.10.2009 03:27:42
\ Экранирует d, что означает один числовой символ. С {4} он ищет четырех из них подряд.
Paul Sasik 13.10.2009 03:31:05
@pasasik - да, \ d имеет особое значение для движка регулярных выражений, но вы должны сначала передать эту строку в движок регулярных выражений. Не удваивая его или не используя @, компилятор C # считает, что вы имеете в виду \ d как «специальный» символ (например, \ t или \ n), и пытается (и не может) обработать его.
Jonathan Rupp 13.10.2009 03:36:41
Я тестирую в RegexHero: regexhero.net/tester и ... Jeesh. я вижу свою ошибку (Извините за двоичный кодер downvote, ТАК не позволил бы мне изменить его ...)
Paul Sasik 13.10.2009 03:40:33