坏编译常量值

Pos*_*Guy 38 c#

我在这个声明中得到"Bad Compile constant value".

Regex objCheckNumber = new Regex("^(\d){4}$");
Run Code Online (Sandbox Code Playgroud)

我只想将其设置为检查另一个字符串,以查看输入的值是否为4位数.

Mar*_*off 72

C#试图解释\d为转义序列,以及\d不是一个有效的转义序列(但\n\t是,例如).你可以加倍反斜杠来逃避它("^(\\d){4}$"),或者你可以在常量字符串前加上一个at符号:@"^(\d){4}$".

  • @psasik:显然`\ d`在正则表达式中有意义,但它不能在正常字符串中保持含义.作为正则表达式的输入,`\ d`是两个字符,而在普通字符串中,`\n`和`\ t`被解释为**一个**字符. (3认同)

Jas*_*aty 8

C#使用\作为转义字符.你需要加倍\\\.

或者,在双引号前放置一个@字符:

new Regex(@"^(\d){4}$")
Run Code Online (Sandbox Code Playgroud)

  • @pasasik - 是的,\ d对正则表达式引擎有特殊意义,但你必须首先将该字符串输入正则表达式引擎.在没有加倍或使用@的情况下,C#编译器认为你的意思是\'作为'特殊'字符(如\ t或\n)并尝试(并且失败)来处理它. (3认同)