在 C# 中验证字符串是否仅包含大写字母和数字

Verifying that a string contains only uppercase letters and numbers in C#

我会使用 Char.IsLetterOrDigit 但我只需要字母大写。

我似乎找不到组合 Char.IsLetterOrDigit 和 Char.IsUpper 的方法,因为当我尝试这种方式时不允许使用数字:

if (input.All(Char.IsLetterOrDigit) && input.All(Char.IsUpper))

我是不是遗漏了什么?

如何分别检查每个字母?

All() 采用可以是 lambda 表达式的谓词。您可以使用它来检查 IsLetter && IsUpperIsDigit 分开检查。

input.All(c => (Char.IsLetter(c) && Char.IsUpper(c)) || Char.IsDigit(c))

Try it online

或者,您可以使用匹配零个或多个大写字符或数字的正则表达式:

using System.Text.RegularExpressions;

Regex r = new Regex(@"^[A-Z0-9]*$");
r.IsMatch(input);

Try it online

正则表达式解释:

^[A-Z0-9]*$
^               Start of string
 [A-Z0-9]       The uppercase letter characters or the digit characters
         *      Zero or more of the previous
          $     End of string

Regex适合这种字符串断言。

工作示例:

using System;
using System.Text.RegularExpressions;  
            
public class Program
{
    public static void Main()
    {
        String input = "THIS0IS0VALID";
        String pattern = "^[A-Z0-9]+$";
        bool isValid = Regex.Match(input, pattern).Success;
        if(isValid) {
            Console.WriteLine("logic here...");
        } 
    }
}


模式细分(^[A-Z0-9]+$):

  • ^:断言行首的位置
  • [A-Z0-9]:要匹配的字符必须是大写字母或数字
  • +:我们可以允许对一个或多个字符进行排序
  • $:断言行尾的位置