我需要匹配这些字符。该引用来自API文档(我们公司外部):
有效字符:0-9 A-Z a-z& # - 。 ,()/:; '@“
我使用此Regex
来匹配字符:
^[0-9a-z&#-\.,()/:;'""@]*$
但是,这会错误地匹配%
,$
等字符以及许多其他字符。怎么了?
您可以使用http://regexhero.net/tester/在线测试此正则表达式,此正则表达式适用于.NET和JavaScript。
答案 0 :(得分:6)
你没有逃脱破折号-
,这是一个保留字符。如果您添加使用\-
替换短划线,则正则表达式不再匹配 #
和\
答案 1 :(得分:5)
将文字-
移到字符集的前面:
^[-0-9a-z&#\.,()/:;'""@]*$
否则将其视为指定范围,就像在0-9
中使用它一样。
答案 2 :(得分:3)
-
符号在未转义时在方括号中具有特殊含义。 #-\.
转换为#-.
(BTW,在方括号中不需要点之前的反斜杠),这意味着“#
(ASCII 0x23)和.
之间的任何字符(ASCII 0x2E)。正确的表示法是
^[0-9a-z&#\-.,()/:;'"@]*$
答案 3 :(得分:3)
字符类中的特殊字符是右括号(]),反斜杠(\),插入符号(^)和连字符( - )。
因此,你应该用反斜杠(\)来逃避它们,或者把它们放在没有歧义的位置,它们不需要转义。在连字符的情况下,这将是第一个或最后一个位置。
您也不需要转义点(。)。
你的正则表达式因此变成:
^[-0-9a-z&#.,()/:;'"@]*$
<小时/> 作为旁注,有许多可用的正则表达式评估器提供代码提示。这样,您只需将鼠标悬停在正则表达式上即可,可以用英文单词进行解释。 其中一个免费的是RegExr。
在其中键入原始正则表达式并将鼠标悬停在连字符上显示:
Matches characters in the range '#-\'
答案 4 :(得分:0)
试试
^[0-9a-zA-Z\&\#\-\.\,\(\)\/\:\;\'\"\@]*$