【问题标题】:C# Regex: Checking for "a-z" and "A-Z"C# 正则表达式:检查“a-z”和“A-Z”
【发布时间】:2011-08-26 10:37:56
【问题描述】:

我想检查一个字符串是否输入在 a-z 或 A-Z 之间的字符中。不知何故,我的正则表达式似乎没有接受它。它总是返回 true。我不知道为什么,我认为这与我编写正则表达式的方式有关。任何帮助,将不胜感激。

private static bool isValid(String str)
{
    bool valid = false;

    Regex reg = new Regex((@"a-zA-Z+"));

    if (reg.Match(str).Success)
        valid = false;
    else 
        valid  = true;     

     return valid;
}

【问题讨论】:

  • 匹配后您将其设置为 false。
  • 提示:您可以使用?i 使您的正则表达式模式不区分大小写,而不是写a-zA-Z,然后在需要的地方写a-z

标签: c# regex


【解决方案1】:

正确的方式应该是这样的:

private static bool isValid(String str)
{
    return Regex.IsMatch(str, @"^[a-zA-Z]+$");
}

此代码具有以下好处:

  • 使用静态方法而不是每次都创建一个新实例:静态方法缓存正则表达式
  • 修复了正则表达式。它现在匹配由一个或多个字符 a-z 或 A-Z 组成的任何字符串。不允许使用其他字符。
  • 更短更易读。

【讨论】:

  • 由于锚点 ^ 和 $,^[a-zA-Z]+$ 将匹配一个完全由字母组成的字符串(可能是 OT 的意图,但您应该更新解释)。
【解决方案2】:
Regex reg = new Regex("^[a-zA-Z]+$");
  • ^ 字符串开头
  • [] 字符集
  • \+一次或多次
  • $ 字符串结尾

^$ 需要,因为您想要验证所有字符串,而不是字符串的一部分

【讨论】:

    【解决方案3】:

    使用

    Regex.IsMatch(@"^[a-zA-Z]+$");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-01
      • 2011-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多