如何使用JavaScript测试字符串中的字母是大写还是小写?


当前回答

如果字符是大写字母,则log true,其他情况则log false:

var letters = ['a', 'b', 'c', 'A', 'B', 'C', '(', ')', '+', '-', '~', '*'];

​​​for (var ​i = 0; i<letters.length; i++) {
    if (letters[i] === letters[i].toUpperCase()
        && letters[i] !== letters[i].toLowerCase()) {
        console.log(letters[i] + ": " + true);
    } else {
        console.log(letters[i] + ": " + false);
    }
}​

你可以在这里测试:http://jsfiddle.net/Axfxz/(使用Firebug或其他工具)。

​​​for (var ​i = 0; i<letters.length; i++) {
    if (letters[i] !== letters[i].toUpperCase()
        && letters[i] === letters[i].toLowerCase()) {
        console.log(letters[i] + ": " + true);
    } else {
        console.log(letters[i] + ": " + false);
    }
}​

这是小写的:)。

其他回答

这是直接的,可读的解决方案使用一个简单的正则表达式。

// Get specific char in string
const char = string.charAt(index);

const isLowerCaseLetter = (/[a-z]/.test(char));
const isUpperCaseLetter = (/[A-Z]/.test(char));

有一个非常简单的答案,其他人都没有提到过:

function isLowerCase(str) {
    return str !== str.toUpperCase();
}

如果str. touppercase()没有返回相同的str,它必须是小写的。要测试大写,您可以将其更改为str !== str. tolowerercase()。

与其他一些答案不同,它可以正确地处理非字母字符(返回false),它也适用于其他字母,重音字符等。

这个问题显然已经回答过很多次了,但我想分享一下我的解决方案,因为我在给出的答案中没有看到它。

var lower_case = function(letter){
    lowers = "abcdefghijklmnopqrstuvwxyz";
    return letter === letter.toLowerCase() && lowers.indexOf(letter) >= 0
};

var upper_case = function(letter){
    uppers = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    return letter === letter.toUpperCase() && uppers.indexOf(letter) >= 0
};

最好的方法是使用正则表达式、三元运算符和内置的字符串.test()方法。

我把正则表达式的里里外外和字符串的测试方法留给你,但在这里我们将使用它来测试你的变量。

/[a-z]/i.test(your-character-here)

这将根据您的字符是否匹配正则表达式中的字符集返回TRUE或FALSE。由于i标志,我们的正则表达式检查所有字母a-z /[a-z]/,而不管它们的大小写。

所以,一个基本的测试是:

var theAnswer = "";
if (/[a-z]/i.test(your-character-here)) {
  theAnswer = "It's a letter."
}

现在我们需要确定它是大写还是小写。因此,如果我们从正则表达式中删除i标志,那么上面的代码将测试小写字母a-z。如果我们在第一个if语句的else中插入另一个if语句,我们也可以用A-Z测试大写。是这样的:

var theAnswer = "";
if (/[a-z]/.test(your-character-here)) {
  theAnswer = "It's a lower case letter."
} else if (/[A-Z]/.test(your-character-here)) {
  theAnswer = "It's an upper case letter.";
}

以防它不是字母,我们可以添加一个最后的else语句:

var theAnswer = "";
if (/[a-z]/.test(your-character-here)) {
  theAnswer = "It's a lower case letter."
} else if (/[A-Z]/.test(your-character-here)) {
  theAnswer = "It's an upper case letter.";
} else {
  theAnswer = "It's not a letter."
}

上面的代码可以工作。但它有点丑。相反,我们可以使用“三元运算符”来替换上面的if-else语句。三元运算符只是简单的if-else编码方式。语法很简单:

(statement-to-be-evaluated) ? (code-if-true) : (code-if-false)

这些也可以相互嵌套。所以函数可能是这样的:

var theAnswer = "";
function whichCase(theLetter) {
  theAnswer = /[a-z]/.test(theLetter) ? "It's lower case." : "";
  theAnswer = /[A-Z]/.test(theLetter) ? "It's upper case." : "";
  return(theAnswer);
}

上面的代码看起来很好,但不能完全工作,因为如果我们的字符是小写的,当它测试大写时,答案会被设置为“”,所以让它们嵌套:

var theAnswer = "";
function whichCase(theLetter) {
  theAnswer = /[a-z]/.test(theLetter) ? "It's lower case." : (/[A-Z]/.test(theLetter) ? "It's upper case." : "It's not a letter.");
  return(theAnswer);
}

那会很有用的!但是没有必要有两个单独的行来设置变量theAnswer,然后返回它。我们应该使用let和const而不是var(如果你不确定为什么,请查阅它们)。一旦我们做出这些改变:

function whichCase(theLetter) {
  return(/[A-Z]/.test(theLetter) ? "It's upper case." : (/[a-z]/.test(theLetter) ? "It's lower case." : "It's not a letter.")); 
}

我们最终得到了一段优雅、简洁的代码。;)

假设一个字符串只有在至少有一个小写字母的情况下才被认为不全是大写,这可以正常工作。我知道它不像其他人试图做的那样简洁,但它有效吗=)

function isUpperCase(str) {
    for (var i = 0, len = str.length; i < len; i++) {
        var letter = str.charAt(i);
        var keyCode = letter.charCodeAt(i);
        if (keyCode > 96 && keyCode < 123) {
            return false;
        }
    }

    return true;
}