【问题标题】:How to check if string is only Numeric and AlphaNumeric and not character string? [closed]如何检查字符串是否只是数字和字母数字而不是字符串? [关闭]
【发布时间】:2011-12-21 19:29:14
【问题描述】:

我有一个示例数据,其中必须确定字符串是数字还是字母数字,但不是简单的字符串。 例如:

my data is:
123XY
12346
WEPXY

前两个(字母数字和数字)返回true,纯字符串返回false的条件是什么?

【问题讨论】:

标签: c# string numeric alphanumeric


【解决方案1】:

使用正则表达式,例如:

([0-9]+[a-zA-Z]+)|([0-9]+)

编辑: 好吧,这有各种各样的问题......我无法用正则表达式自己解决这个问题,但能够创建一个运行良好的函数:

private bool HasLettersAndNumbersOnly(string value)
{
    return !(Regex.IsMatch(value, @"^[a-zA-Z]+$") || Regex.IsMatch(value, @"[^a-zA-Z0-9]"));
}

测试:

  • 123XY : 真
  • 12346:是的
  • XY123:是的
  • X123Y:是的
  • x2c3g:是的
  • 2c3v4:是的
  • 5c1=+ : 错误
  • WEPXY:错误
  • 【讨论】:

    • 我意识到括号不是必需的,但它可以帮助我理解正则表达式的作用......
    • 这需要字母跟在数字后面,并且不匹配例如XY123
    • 也不能在 X123Y 上工作...
    【解决方案2】:

    您可以使用只允许 A-Z、a-z 和 0-9 的正则表达式,并使用正向前瞻要求至少一位数字:

    bool isValid = Regex.IsMatch(input, @"^(?=.*\d)[A-Za-z\d]+$");
    

    测试:

    "123XY" : true
    "12346" : true
    "WEPXY" : false
    "1abcd" : true
    "abcd1" : true
    "ab2cd" : true
    "1abc2" : true
    "1"     : true
    "a"     : false
    "1a"    : true
    "a1"    : true
    ""      : false
    

    【讨论】:

    • 为什么不直接找一个数字呢?正则表达式 \d 非常简单,并且可以根据提供的测试数据获得正确的结果。
    • @Inuyasha:这并没有完成“确定字符串是数字还是字母数字”的任务。像"12-34" 这样的字符串会产生误报。
    • 测试数据中未提供测试字符串“12-34”。条件是它不是一个简单的字符串并且包含一个数字。我们的解决方案需要适应提供的数据,而不是我们梦想的数据。完全有可能“12-34”永远不会进行测试。
    • @Inuyasha:在这种情况下,您可以使用表达式input <> "WEPXY"。这将为您提供给定测试数据所需的准确结果。
    • 既然我们在“梦想数据”,那么“123äää”呢?
    【解决方案3】:
    Regex r = new Regex(@"\d");
    string[] testData = new string[] { "123XY", "12346", "WEPXY" };
    foreach (var s in testData)
    {
        bool isMatch = r.IsMatch(s);
        Console.WriteLine("Data: {0}, Is match: {1}", s, isMatch);
    }
    Console.ReadLine();
    

    基本上你只需要检查字符串是否包含数字,对吧?正则表达式 '\d' 匹配任何数字。

    上面的代码打印出来:

    数据:123XY,是否匹配:真
    数据:12346,是否匹配:真
    数据:WEPXY,是否匹配:False

    【讨论】:

      【解决方案4】:

      如果您想要一种方法来使用类似这样的方法,您可以检查其中一个并让它返回 True 或 false

      public static bool IsOnlyNumbers(string strValidateString, bool boolCheck4LetterOrDigit)
      {
          bool boolValidatePassed = false;
          switch (boolCheck4LetterOrDigit)
          {
            case  true:
              {
                  if (strValidateString.All(Char.IsDigit))
                  {
                      boolValidatePassed = true;
                  }
                  break;
              }
            case false:
              {
                  if (strValidateString.All(Char.IsLetter))
                  {
                      boolValidatePassed = false;
                  }
                  break;
              }
          }
          return boolValidatePassed;
      }
      

      【讨论】:

      • WEPXY 也将返回 true。
      • 哎呀,我写的很快让我编辑.. 他可以更改示例并更改为他想要的任何工作,但基本上如果他使用 Char。他可以找到他需要的所有方法并创建一个委托、lambda、linq、for 循环等.. 取决于他想要验证或检查的内容
      猜你喜欢
      • 2012-12-27
      • 1970-01-01
      • 2023-03-23
      • 2012-08-20
      • 1970-01-01
      • 2011-07-11
      • 2017-11-02
      • 1970-01-01
      • 2013-04-01
      相关资源
      最近更新 更多