正则表达式不过滤特殊符号

时间:2013-02-27 05:31:45

标签: c# regex

我目前正在使用以下代码行:

Regex Regex_Alpha = new Regex(@"[a-zA-Z]+('[a-zA-Z])?[a-zA-Z]*");

我想要做的是过滤文本字段的输入,条件是输入应该只是字母和撇号符号(实际上,我还想添加更多,但我想先解决这个问题。)< / p>

现在,它接受所有字符,甚至数字。

根据我对Regex的理解,我尝试在以下行中制定自己的表达式:

Regex Regex_Alpha = new Regex(@"^[a-zA-Z'-"+$);

它会过滤数字,但不接受撇号。试图删除@符号并使用反斜杠转义字符过滤撇号,但仍无用。

过滤输入的最佳方法应该是什么?它只接受字母和撇号? (一旦我理解了这个符号应该如何工作,我会做其余的符号)

1 个答案:

答案 0 :(得分:1)

正如我所评论的那样,你的第一个正则表达式是一个相当不错的“字母,一个撇号不在两端”。但是,它匹配任何字符串甚至是单个字母,因为正则表达式在输入中查找任何匹配,而不是整个输入匹配。

您可以通过执行第二个正则表达式中的操作来解决此问题 - 只需在开头添加^,在结尾添加$。这意味着表达式的开头和结尾必须匹配输入的开头和结尾,因此它确保整个输入仅由字母和可能的撇号组成。

关于你的第二个正则表达式,你有一些问题。

  • 如果您想在@"..."字符串文字中使用双引号,则需要输入两个双引号。 (我认为这可能只是你问题中的打字错误,因为你现在所拥有的甚至都不会编译。)
  • 您需要使用]关闭角色类,否则[及其中的所有内容都会被视为一系列匹配的字符,一个接一个。
  • 如果你想在一个字符类中使用连字符,它必须在开头或结尾处,或者它被误认为是“在”之间的连字符(如在A-Z中)。

表达式@"^[a-zA-Z'""-]+$"应匹配“完全由字母,撇号,引号或连字符组成的任何字符串”。