0

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

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

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

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

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

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

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

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

4

1 回答 1

1

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

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

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

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

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

于 2013-02-27T08:30:51.340 回答