JavaScript中检查字符串是否全为大写字母的最佳方法是什么?

5

我已经搜索了一段时间,但没有完美的答案。

例如,有些人说我可以使用:

function isUpperCase(str) {
    return str === str.toUpperCase();
}

这对于简单情况是有效的,但对于复杂情况则不适用。

例如:

isUpperCase('ABC'); // works good
isUpperCase('ABcd'); // works good too
isUpperCase('汉字'); // not working, should be false.
5个回答

5

RegExp /^[A-Z]+$/ returns expected result

const isUpperCase = str => /^[A-Z]+$/.test(str);

console.log(
  isUpperCase("ABC")
  , isUpperCase("ABcd")
  , isUpperCase("汉字")
);


“ABC0123” 应该返回 “true” 吗?(不太清楚 OP 想要什么 - 请参见我的答案下的评论) - Bruno Grieder
@BrunoGrieder 在原问题的文本中没有出现 "ABC0123" - guest271314

5
如何呢?
function isUpperCase(str) {
    return str === str.toUpperCase() && str !== str.toLowerCase();
}

匹配最后一个


1
isUpperCase(''.toUpperCase()) 返回 false。 - Unamata Sanatarai
相反,我认为:OP想要的是当字符串包含1)可以更改大小写的字符并且2)这些字符是大写时,isUpperCase返回true。您的“字符”无法更改大小写,因此返回false。 - Bruno Grieder
我没有看到它。我看到的是一个问题:“这个字符串是否全部大写”。在这种情况下,它不是全部大写,因为当字符转换为大写/小写时,其数值不会改变。 - Unamata Sanatarai
你的表情符号示例与原帖中的中文字符示例完全相同,而原帖作者期望结果为“false”。 - Bruno Grieder

2
您可以尝试使用正则表达式方法。
   const isUpperCase2 = (string) => /^[A-Z]*$/.test(string);
   isUpperCase2('ABC'); // true
   isUpperCase2('ABcd'); // false
   isUpperCase2('汉字'); // false

希望这能帮到你;

0

首先,你的代码似乎运行得很好。

小写字符汉字和大写字符汉字具有相同的数值,如下所示:

var str = '汉字';
for (i = 0; i < str.length; i++){
    console.log(str[i], str.charCodeAt(i), str.toUpperCase().charCodeAt(i),str.toLowerCase().charCodeAt(i))
}

让我们将此结果与其他一些字符串进行比较:

    var str = 'łóÐŻCakf8';
    for (i = 0; i < str.length; i++){
        console.log(str[i], str.charCodeAt(i), str.toUpperCase().charCodeAt(i),str.toLowerCase().charCodeAt(i))
    }


0

试试这个

function isUpperCase(str){
   for (i = 0; i < str.length; i++) { 
    var charCode=str.charCodeAt(i);
         if(charCode<65||charCode>90){
            return false;
          }
      }
     return true;
   }

您可以通过ASCII码检查字母。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接