如何使用JavaScript测试字符串中的字母是大写还是小写?
当前回答
function checkCase(c){
var u = c.toUpperCase();
return (c.toLowerCase() === u ? -1 : (c === u ? 1 : 0));
};
根据索尼克·比尔德的评论来主要回答。我改变了结果中的逻辑:
0:小写 1:大写 1:没有
其他回答
Stephen Nelsons的函数转换成带有大量测试示例的原型。
为了完整起见,我还在函数中添加了整个字符串。
有关其他注释,请参阅代码。
/* Please note, there's no requirement to trim any leading or trailing white spaces. This will remove any digits in the whole string example returning the correct result. */ String.prototype.isUpperCase = function(arg) { var re = new RegExp('\\s*\\d+\\s*', 'g'); if (arg.wholeString) {return this.replace(re, '') == this.replace(re, '').toUpperCase()} else return !!this && this != this.toLocaleLowerCase(); } console.log('\r\nString.prototype.isUpperCase, whole string examples'); console.log(' DDD is ' + ' DDD'.isUpperCase( { wholeString:true } )); console.log('9 is ' + '9'.isUpperCase( { wholeString:true } )); console.log('Aa is ' + 'Aa'.isUpperCase( { wholeString:true } )); console.log('DDD 9 is ' + 'DDD 9'.isUpperCase( { wholeString:true } )); console.log('DDD is ' + 'DDD'.isUpperCase( { wholeString:true } )); console.log('Dll is ' + 'Dll'.isUpperCase( { wholeString:true } )); console.log('ll is ' + 'll'.isUpperCase( { wholeString:true } )); console.log('\r\nString.prototype.isUpperCase, non-whole string examples, will only string on a .charAt(n) basis. Defaults to the first character'); console.log(' DDD is ' + ' DDD'.isUpperCase( { wholeString:false } )); console.log('9 is ' + '9'.isUpperCase( { wholeString:false } )); console.log('Aa is ' + 'Aa'.isUpperCase( { wholeString:false } )); console.log('DDD 9 is ' + 'DDD 9'.isUpperCase( { wholeString:false } )); console.log('DDD is ' + 'DDD'.isUpperCase( { wholeString:false } )); console.log('Dll is ' + 'Dll'.isUpperCase( { wholeString:false } )); console.log('ll is ' + 'll'.isUpperCase( { wholeString:false } )); console.log('\r\nString.prototype.isUpperCase, single character examples'); console.log('BLUE CURAÇAO'.charAt(9) + ' is ' + 'BLUE CURAÇAO'.charAt(9).isUpperCase( { wholeString:false } )); console.log('9 is ' + '9'.isUpperCase( { wholeString:false } )); console.log('_ is ' + '_'.isUpperCase( { wholeString:false } )); console.log('A is ' + 'A'.isUpperCase( { wholeString:false } )); console.log('d is ' + 'd'.isUpperCase( { wholeString:false } )); console.log('E is ' + 'E'.isUpperCase( { wholeString:false } )); console.log('À is ' + 'À'.isUpperCase( { wholeString:false } )); console.log('É is ' + 'É'.isUpperCase( { wholeString:false } )); console.log('Ñ is ' + 'Ñ'.isUpperCase( { wholeString:false } )); console.log('ñ is ' + 'ñ'.isUpperCase( { wholeString:false } )); console.log('Þ is ' + 'Þ'.isUpperCase( { wholeString:false } )); console.log('Ͻ is ' + 'Ͻ'.isUpperCase( { wholeString:false } )); console.log('Ͽ is ' + 'Ͽ'.isUpperCase( { wholeString:false } )); console.log('Ά is ' + 'Ά'.isUpperCase( { wholeString:false } )); console.log('Έ is ' + 'Έ'.isUpperCase( { wholeString:false } )); console.log('ϴ is ' + 'ϴ'.isUpperCase( { wholeString:false } )); console.log('Ϋ is ' + 'Ϋ'.isUpperCase( { wholeString:false } )); console.log('Ϣ is ' + 'Ϣ'.isUpperCase( { wholeString:false } )); console.log('Ϥ is ' + 'Ϥ'.isUpperCase( { wholeString:false } )); console.log('Ϧ is ' + 'Ϧ'.isUpperCase( { wholeString:false } )); console.log('Ϩ is ' + 'Ϩ'.isUpperCase( { wholeString:false } )); console.log('Ϫ is ' + 'Ϫ'.isUpperCase( { wholeString:false } )); console.log('Ϭ is ' + 'Ϭ'.isUpperCase( { wholeString:false } )); console.log('Ϯ is ' + 'Ϯ'.isUpperCase( { wholeString:false } )); console.log('Ϲ is ' + 'Ϲ'.isUpperCase( { wholeString:false } )); console.log('Ϸ is ' + 'Ϸ'.isUpperCase( { wholeString:false } )); console.log('Ϻ is ' + 'Ϻ'.isUpperCase( { wholeString:false } ));
你可以使用正则表达式测试和toUpperCase方法:
String.prototype.charAtIsUpper = function (atpos){
var chr = this.charAt(atpos);
return /[A-Z]|[\u0080-\u024F]/.test(chr) && chr === chr.toUpperCase();
};
// usage (note: character position is zero based)
'hi There'.charAtIsUpper(3); //=> true
'BLUE CURAÇAO'.charAtIsUpper(9); //=> true
'Hello, World!'.charAtIsUpper(5); //=> false
另请参阅
假设一个字符串只有在至少有一个小写字母的情况下才被认为不全是大写,这可以正常工作。我知道它不像其他人试图做的那样简洁,但它有效吗=)
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;
}
最好的方法是使用正则表达式、三元运算符和内置的字符串.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."));
}
我们最终得到了一段优雅、简洁的代码。;)
其他答案的问题是,一些字符,如数字或标点符号,在检查小写/大写时也返回true。
我发现这个方法非常有效:
function isLowerCase(str)
{
return str == str.toLowerCase() && str != str.toUpperCase();
}
这适用于标点符号、数字和字母:
assert(isLowerCase("a"))
assert(!isLowerCase("Ü"))
assert(!isLowerCase("4"))
assert(!isLowerCase("_"))
要检查一个字母,只需使用isLowerCase(str[charIndex])