Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不过滤特殊符号的正则表达式_C#_Regex - Fatal编程技术网

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

C# 不过滤特殊符号的正则表达式,c#,regex,C#,Regex,我目前正在使用以下代码行: Regex Regex_Alpha = new Regex(@"[a-zA-Z]+('[a-zA-Z])?[a-zA-Z]*"); 我想做的是过滤文本字段的输入,条件是输入只能是字母和撇号(实际上,我仍然想添加更多,但我正在尝试首先解决这个问题) 现在,它接受所有字符,甚至数字 根据我对正则表达式的理解,我试图用以下方式表达我自己的表达: Regex Regex_Alpha = new Regex(@"^[a-zA-Z'-"+$); 它过滤数字,但不接受撇号符号。

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

Regex Regex_Alpha = new Regex(@"[a-zA-Z]+('[a-zA-Z])?[a-zA-Z]*");
我想做的是过滤文本字段的输入,条件是输入只能是字母和撇号(实际上,我仍然想添加更多,但我正在尝试首先解决这个问题)

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

根据我对正则表达式的理解,我试图用以下方式表达我自己的表达:

Regex Regex_Alpha = new Regex(@"^[a-zA-Z'-"+$);
它过滤数字,但不接受撇号符号。试图删除@符号并用反斜杠转义字符过滤撇号,但仍然没有用


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

正如我所评论的,您的第一个正则表达式非常适合“字母,两端都没有一个撇号”。但是,它甚至用一个字母匹配任何字符串,因为正则表达式查找输入中的任何匹配项,而不是整个输入是否匹配

您可以通过执行在第二个正则表达式中所做的操作来修复此问题—只需在开始处放置一个
^
,在结束处放置一个
$
。这意味着表达式的开始和结束必须匹配输入的开始和结束,因此它确保整个输入仅由字母和可能的撇号组成

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

  • 如果要在
    @“…”
    字符串文字中使用双引号,则需要使用两个双引号。(我认为这可能只是您问题中的一个键入错误,因为您当前拥有的内容甚至无法编译。)
  • 你需要用
    ]
    关闭你的角色类,否则
    [
    和里面的所有东西都会被视为一个字符序列,一个接一个地匹配
  • 如果要在字符类中使用连字符,它必须在开头或结尾,否则会被误认为是“中间”连字符(如
    a-Z

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

您的第一个表达式看起来像是在尝试“只处理字母,只使用一个可选撇号,只要撇号不在开头或结尾”.这就是你想要的吗?@Rawling,现在是的,但我可能需要添加更多的过滤器,比如添加连字符和点字符。我只需要撇号就可以了,因为我一直在努力解决正则表达式,但我仍然无法解决它。那只是一个印刷错误,对不起。我认为问题不在于我的正则表达式e、 我相信你的答案是正确的,我以前的实验也是如此,但问题还是出现了。我将重新检查我的方法可能出了什么问题,因为我将Regex声明放在了一个单独的类上,我只是调用这些方法来验证字符串。谢谢。@Jack我对你的编辑有些困惑。(我不介意,我只是好奇它是关于什么的。)这是因为;因为你的帖子涵盖的不仅仅是一个拼写错误,所以这个问题不应该以“太本地化”来结束;我通过删除你答案中的“拼写错误”一词来防止这种情况发生:)