2013-12-03 44 views
0

全新使用正则表达式。我有一个目前只接受字母数字字符。我需要以下特殊字符添加到正则表达式:将特殊字符添加到字母数字正则表达式

@ #$%*():;"',/? !+=-_ 

这里是正则表达式:

RegularExpression(@"^[a-zA-Z\s.,0-9-]{1,30}$", 

当我尝试添加特殊字符,我改变了正则表达式,像这样:

RegularExpression(@"^[a-zA-Z\s.,[email protected] #$%*():;"',/? !+=-_]{1,30}$" 

但是,这会引发一个错误,从'字符Newline in constant开始。

我已经绑定逃脱"'字符,但没有任何运气。

回答

5

问题来自需要转义的双引号(""),而不是单引号。

@"^[a-zA-Z\s.,[email protected]#$%*():;""'/?!+=_-]{1,30}$" 

注意,-必须在字符类的最后一个(或第一)位置,因为它具有特殊的含义(定义范围)

+0

“-'不一定要在开头或结尾被解析为文字。它可以在子句之间或逃脱。 – sln

+0

对不起,我以为这是PCRE引擎。我还没有为C#测试过,它可能会或可能不会有所不同。 – sln

+0

这对我来说工作得很好,我在用C#编码的ASP MVC网站中使用它。谢谢! – NealR

0

这些regexs'等同于你的。
两者均使用波形号~作为分隔符。
在正则表达式字符串上都使用双引号。

请注意,为了使文字中的破折号-被解释为字面而不是范围运算符,它必须存在某个明确的地方,或者被转义。
放置它的好地方在有效范围之间(或者在课程的开始或结束时)。
例如[a-z - 0-9]是个好地方。
编辑 - '-'字面可能不得不逃脱或开始/结束课堂。 (这种情况是Perl/PCRE引擎)

这一个^[a-z-A-Z0-9_\s.,@#$%*():;"',/?!+=]{1,30}$是你的正则表达式没有重复的字符。

为了使它更可读注意到词类被包含,也可以减少到
^[\w-\s.,@#$%*():;"',/?!+=]{1,30}$

编辑 - 腓测试用例除去。

+0

对不起,我看到这是C#。我可以发誓它是PHP。 – sln

相关问题