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


当前回答

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

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

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

其他回答

在现代浏览器中,您可以使用regexp和unicode属性测试。

/\p{Lu}/u.test("A") // is true
/\p{Lu}/u.test("Å") // is true
/\p{Lu}/u.test("a1å") // is false

更多信息:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Unicode_Property_Escapes

一般类别列表如下:

https://unicode.org/reports/tr18/#General_Category_Property

只需检查ASCII值

// IsLower verify that a string does not contains upper char
func IsLower(str string) bool {
    for i := range str {
        ascii := int(str[i])
        if ascii < 91 && ascii > 64 {
            return false
        }
    }
    return true
}

最好的方法是使用正则表达式、三元运算符和内置的字符串.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.")); 
}

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

我最近是这样做的:

1)检查字符/字符串s是否是小写的

s. tolowercase () == s && s. touppercase ()

2) s为大写

s. touppercase () == s && s. tolowercase ()

涵盖s包含非字母字符和变音符符号的情况。

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

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
};