检测字符串是否全部是CAPS

Stu*_*ule 52 c# string

在C#中有一种方法可以检测字符串是否全部为大写字母?

大多数字符串都很短(即不超过100个字符)

Gre*_*ean 95

无需创建新字符串:

bool IsAllUpper(string input)
{
    for (int i = 0; i < input.Length; i++)
    {
        if (!Char.IsUpper(input[i]))
             return false;
    }

    return true;
}
Run Code Online (Sandbox Code Playgroud)

编辑:如果你想跳过非字母字符(OP的原始实现没有,但他/她的评论表明他们可能想要):

   bool IsAllUpper(string input)
    {
        for (int i = 0; i < input.Length; i++)
        {
            if (Char.IsLetter(input[i]) && !Char.IsUpper(input[i]))
                return false;
        }
        return true;
    }
Run Code Online (Sandbox Code Playgroud)

  • 或者如果(input.All(Char.IsUpper){} (2认同)
  • 我不明白为什么只有10条线可以声明一个简单的正则表达式匹配项... Googled叔叔告诉我*新* Regex(@“ [AZ] +”)。IsMatch(输入)`应该工作...或...检查[az],并且应该没有匹配项(如果允许输入非字母字符)\ _()_ / (2认同)

Jon*_*eet 76

我喜欢LINQ方法.

如果要将其限制为所有大写字母(即没有空格等):

return input.All(c => char.IsUpper(c));
Run Code Online (Sandbox Code Playgroud)

或使用方法组转换:

return input.All(char.IsUpper);
Run Code Online (Sandbox Code Playgroud)

如果你想禁止小写字母:

return !input.Any(c => char.IsLower(c));
Run Code Online (Sandbox Code Playgroud)

要么

return !input.Any(char.IsLower);
Run Code Online (Sandbox Code Playgroud)

  • “ XyZ” .All(Char.IsUpper) (2认同)

Bol*_*ait 55

简单?

if (input.ToUpper() == input)
{
    // string is all upper
}
Run Code Online (Sandbox Code Playgroud)

  • 这会为"ABC1"或"*!()@"等字符串计算"true".我不知道原始的海报上下文,但对于包含非大写字母的字符串,此解决方案肯定会返回'true'. (3认同)
  • 更少的代码是更好的代码.一种方法是不必要地将其转换为上层,另一种方法是将不必要的简单==转换为九行循环函数.如果分析显示它有用,则进行优化. (2认同)
  • 我会选择ToUpperInvariant() (2认同)

Ife*_*ruo 14

确保您的大写定义匹配.Nets定义大写.

.Net中的ToUpper()是一种语言操作.在某些语言中,大写规则并不是直截了当的.土耳其语我因此而闻名.

// Meaning of ToUpper is linguistic and depends on what locale this executes
// This test could pass or fail in ways that surprise you.
if (input.ToUpper() == input) 
{
    // string is all upper
}
Run Code Online (Sandbox Code Playgroud)

你可以用

// Meaning of ToUpper is basically 'ASCII' ToUpper no matter the locale.
if (input.ToUpper(CultureInfo.InvariantCulture) == input) 
{
    // string is all upper
}
Run Code Online (Sandbox Code Playgroud)

你可能想要通过字符大写来节省内存

MSDN警告不要这样做

for(int i = 0; i < input.Length; i++) {
   if(input[i] != Char.ToUpper(input[i], CultureInfo.InvariantCulture)) {
     return false;
   }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码介绍了一个bug.一些非英语'字母'需要两个.net字符来编码(代理对).您必须检测这些对并将它们作为一个单元进行大写.

此外,如果您省略了文化信息以获得语言大写,那么您将引入一个错误,在某些区域设置中,您的家庭酿造大写算法不同意该区域设置的.net算法.

当然,如果您的代码永远不会在英语区域之外运行或从不接收非英语文本,那么这一切都不重要.


M4N*_*M4N 7

使用

if (input == input.ToUpper())
Run Code Online (Sandbox Code Playgroud)


Nic*_*ick 6

我会将字符串转换为所有大写字母(with ToUpper)然后将其与原始字符串(使用)进行比较Equals.应该可以在一行代码中使用.

return s.Equals(s.ToUpper())