【问题标题】:Regex expression not filtering special symbols正则表达式不过滤特殊符号
【发布时间】:2013-02-27 05:31:44
【问题描述】:

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

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

我想要做的是过滤文本字段的输入,条件是输入只能是字母和撇号(实际上,我还想添加更多,但我正在尝试先解决这个问题)。

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

根据我对 Regex 的理解,我尝试将自己的表达方式表述为:

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

它过滤数字,但不接受撇号。尝试删除@符号并使用反斜杠转义字符过滤撇号,但仍然没有用。

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

【问题讨论】:

  • 您的第一个表达式看起来像是在尝试“只有字母,带有一个可选的撇号,只要撇号不在开头或结尾”。这就是你所追求的吗?
  • @Rawling,现在是的,但我可能需要稍后添加更多过滤器,例如添加连字符和点字符。我只需要撇号工作,因为我一直在尝试解决正则表达式,但我仍然无法解决它。

标签: c# regex


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 这只是一个印刷错误,抱歉。我认为问题不再在于我的正则表达式,因为我相信您的答案是正确的,我之前的实验也是如此,但问题仍然存在。我将重新检查我的方法可能出了什么问题,因为我已将 Regex 声明放在一个单独的类中,并且我只是调用这些方法来验证字符串。谢谢。
  • @Jack 我对你的编辑有点困惑。 (我不介意,我只是好奇它是关于什么的。)
  • 因为this meta post;由于您的帖子不仅仅是一个错字,因此不应以“过于本地化”来结束该问题;我通过删除答案中的“错字”一词来防止这种情况发生:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-16
  • 1970-01-01
  • 2020-03-29
  • 2015-12-23
  • 2018-06-13
相关资源
最近更新 更多