使用正则表达式的全新功能。我有一个目前只接受字母数字字符。我需要在正则表达式中添加以下特殊字符:
@ #$%*():;"',/? !+=-_
这是正则表达式:
RegularExpression(@"^[a-zA-Z\s.,0-9-]{1,30}$",
当我尝试添加特殊字符时,我改变了正则表达式:
RegularExpression(@"^[a-zA-Z\s.,0-9-@ #$%*():;"',/? !+=-_]{1,30}$"
但是,这会引发'
字符Newline in constant
开头的错误。
我已经绑定以逃避"
和'
字符,但没有任何运气。
答案 0 :(得分:5)
问题来自需要转义的双引号(""
),而不是来自单引号。
@"^[a-zA-Z\s.,0-9@#$%*():;""'/?!+=_-]{1,30}$"
请注意-
必须位于字符类的最后(或第一)位置,因为它具有特殊含义(定义范围)
答案 1 :(得分:0)
这些正则表达式相当于你的
两者都使用波浪号~
作为分隔符
两者都在正则表达式字符串上使用双引号。
请注意,为了使类中的短划线-
按字面解释而不是作为范围运算符,它必须存在于明确的位置或转义。
放置它的好地方是在有效范围之间(或在课程的开头或结尾)
例如[a-z -
0-9]是个好地方
编辑 - '-'
文字可能必须转义或开始/结束课程。 (此案例适用于Perl / PCRE引擎)
这一个^[a-z-A-Z0-9_\s.,@#$%*():;"',/?!+=]{1,30}$
是你的正则表达式,没有重复的字符。
为了使其更具可读性,注意包含单词class,可以将其简化为
^[\w-\s.,@#$%*():;"',/?!+=]{1,30}$
编辑 - 删除了Php测试用例。