2014-01-17 179 views
0

我想验证一个文本框只接受字母数字和"\"字符,像这样:Testing123\将返回true。 下面是我到目前为止已经试过:C#无法理解正则表达式

"^[a-zA-Z0-9]*?$" 

上述表达式可以接受的字母数字,没有哪个做工精细的字母数量的限制。

如果没有记错的话,"\"表现为转义字符,所以我尝试了下面的表达,但它抛出unterminated expression例外:

"^[a-zA-Z0-9\\]*?$" 

回答

8

你将不得不双逃避反斜杠字符,因为你真正需要发送反斜杠到正则表达式语法分析程序:

string example1 = "^[a-zA-Z0-9\\\\]*?$"; //two backslash characters assigned to the string 

逸出的第一级是编译器,以及用于正则表达式的第二电平 - 的反斜杠是一个转义字符,无论是在C#和正则表达式(即,像\n更有意义的C#编译器之类的东西\s更有意义的正则表达式解析器)

或者你可以使用@文字标记:

string example2 = @"^[a-zA-Z0-9\\]*?$" //same here but the @ symbol saves us the headache 

为什么你看到“未终止的表达”是正则表达式解析器看到^[a-zA-Z0-9\]*?$ - 也就是开始的行标志后跟包含大写字母,小写字母,数字字符类,字符]*,?,$,其中从未关闭,因为没有右括号

+0

纠正我,如果我错了,如果现在的情况下改变''而不是\,那么正确的表达是'? “^ [a-zA-Z0-9 \\\?] *?$”'而不是? –

+1

是和不是:a)你不需要'/?',因为它不是一个转义序列,编译器对'?'没有特殊的含义,所以我们只需要''^ [a -ZA-Z0-9 \\?] *?$“'。 b)实际上你不需要在字符类中跳过'?',所以向Regex引擎发送一个反斜杠是多余的,你可以简单地使用'“^ [a-zA-Z0-9?] *?$“' –

0

放多了一个反斜杠在你的正则表达式如下所示:

"^[a-zA-Z0-9\\\\]*?$" 
+0

这是另外两个,你的答案是由lc给出的。无论如何,谢谢你:) –

+0

这是两个更多的编译器视角:) – SpiderCode