【问题标题】:For loop check if string only has 3 capital letters followed by 4 numbers [closed]For循环检查字符串是否只有3个大写字母后跟4个数字[关闭]
【发布时间】:2015-01-26 14:38:18
【问题描述】:

我输入了一个必须以三个大写字母开头并以四个数字结尾的字符串(例如:“SJL1036”),该程序只是应该检查我的输入是否遵循该模型。

如果我输入 "Sjl1036" og "SJL103" 它会输出这是一个错误的陈述。

【问题讨论】:

  • 您考虑过使用正则表达式吗?
  • 您在这里并没有真正提出问题。你刚才说了些什么。试着改写一下,问一个我们可以帮助你的具体问题。
  • for-loop 有什么关系?

标签: c# for-loop


【解决方案1】:

试试这个正则表达式。 3 个大写字母,4 个数字。

^[A-Z]{3}[0-9]{4}$

例如:

var value = "FSK2526";
if (Regex.IsMatch(value, @"^[A-Z]{3}[0-9]{4}$")) {
   // it matches
}

【讨论】:

  • 更多关于如何使用 C# 实现这一点的信息将对 OP 有所帮助。
【解决方案2】:

虽然你可以用 for 循环来做,但你可以用正则表达式进一步简化它:

Regex regex = new Regex(@"^[A-Z]{3}.*[0-9]{4}$");
Match match = regex.Match("SJL1036");
if (match.Success)
{
    Console.WriteLine(match.Value);
}

【讨论】:

    【解决方案3】:

    如果这是要求:

    必须以三个大写字母开头并以 四位数

    可能最有效的方法是使用string methods:

    bool valid = input.Length >= 7 
        && input.Remove(3).All(Char.IsUpper) // or input.Substring(0, 3)
        && input.Substring(input.Length - 4).All(Char.IsDigit);
    

    如果实际要求是“3个大写字母后跟4个数字”(所以7个字符),您只需将input.Length >= 7更改为input.Length == 7即可。

    【讨论】:

    • 嗯,这允许“ABC1234xxxxx”
    • ABCd1011 不会失败吗?
    • @DrKoch:不,它没有。 input.Substring(input.Length - 4).All(Char.IsDigit) 检查最后四个字符是否为数字。
    • @Michael:不,要求是:“以三个大写字母开头,以四位数字结尾”。 input.Remove(3).All(Char.IsUpper) 检查前三个字符是否为大写,input.Substring(input.Length - 4).All(Char.IsDigit) 检查后四个字符是否为数字。
    • 这个问题可以用多种方式解释,但我认为蒂姆完全正确。
    【解决方案4】:

    非正则表达式选项,您可以使用一些 LINQ,例如:

    string str = "SJL1036";
    if (str.Length == 7 &&
        str.Take(3).All(char.IsUpper)
        && str.Skip(3).All(char.IsDigit))
    {
        Console.WriteLine("valid");
    }
    else
    {
        Console.WriteLine("invalid");
    }
    

    【讨论】:

      猜你喜欢
      • 2019-08-08
      • 2012-05-08
      • 2019-08-05
      • 2016-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多