最好的方法是对字符串使用正则表达式、三元运算符和内置的.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);
}
上面的代码看起来不错,但不太好用,因为如果我们的字符是小写的,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."));
}
我们最终得到了一段优雅、简洁的代码。 ;)