计算字母数,计算大写和小写字母,计算单词和计数空格。这就是我所做的:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Case Check</title>
<script type="text/javascript">
function checkCase(text)
{
var counter = 0;
var letters = 0;
var lowercase = 0;
var uppercase = 0;
var spaces = 0;
var words = 0;
for(; counter < text.length; counter++)
{
if(isUpperCase(text.charAt(counter))) {uppercase ++; letters++;}
if(isLowerCase(text.charAt(counter))) {lowercase ++; letters++;}
if((text.charAt(counter) == " ") && (counter < text.length))
{
spaces += 1;
words += 1;
}
if((text.charAt(counter) == ".") || (text.charAt(text(counter)) == ",")) continue;
}
return [letters, lowercase, uppercase, spaces, words];
}
function isUpperCase(character)
{
if(character == character.toUpperCase) return true;
else return false;
}
function isLowerCase(character)
{
if(character == character.toLowerCase) return true;
else return false;
}
</script>
</head>
<body>
<script type="text/javascript">
var typed = prompt("Enter some words.");
var result = checkCase(typed);
document.write("Number of letters: " + result[0] + "br /");
document.write("Number of lowercase letters: " + result[1] + "br /");
document.write("Number of uppercase letters: " + result[2] + "br /");
document.write("Number of spaces: " + result[3] + "br /");
document.write("Number of words: " + result[4] + "br /");
</script>
</body>
根据用户的建议进行了一些更改。现在的问题是它不会让我像处理字符串对象那样对待'text'。
答案 0 :(得分:10)
使用正则表达式。
示例强>
var s = "thisIsAstring";
var numUpper = s.length - s.replace(/[A-Z]/g, '').length;
// numUpper = 2
处查看更多内容
答案 1 :(得分:4)
您可以使用match()和正则表达式。
var str = "aBcD";
var numUpper = (str.match(/[A-Z]/g) || []).length; // 2
答案 2 :(得分:2)
isUpperCase
和isLowerCase
不是JavaScript函数。
您可以使用
之类的内容替换它们var isUpperCase = function(letter) {
return letter === letter.toUpperCase();
};
var isLowerCase = function(letter) {
return letter === letter.toLowerCase();
};
您的代码中存在大量语法错误,需要检查。
我也对所有括号感到困惑,所以我没有使用charAt
,而是像数组一样引用了字符串。而不是
text.charAt(letters)
我用了
text[letters]
我发现更容易阅读。
查看完整的jsFiddle here。我稍微修改了你的代码,因为jsFiddle不允许document.write
答案 3 :(得分:2)
使用CharCodeAt()方法的另一种解决方案。
const bigLettersCount = (str) => {
let result = 0;
for (let i = 0; i < str.length; i += 1) {
if (str.charCodeAt(i) > 64 && str.charCodeAt(i) <91 ) {
result += 1;
}
}
return result
}
console.log(bigLettersCount('Enter some words.'))
答案 4 :(得分:1)
不确定是否存在整个问题,但是对此问题不好。
if(text.charAt(letters)) == " " && text(letters) < text.length)
^
应该是
if(text.charAt(letters) == " ") && text(letters) < text.length)
^
实际上我已经成功了
if((text.charAt(letters) == " ") && (text(letters) < text.length))
答案 5 :(得分:0)
当字符串包含UTF8或变音符号时,此处的大多数解决方案将失败。可以在turbocommons库中找到适用于所有字符串的改进版本,
示例:
// Returns 2
StringUtils.countByCase('1声A字43B45-_*[]', StringUtils.FORMAT_ALL_UPPER_CASE);
// Returns 1
StringUtils.countByCase('1声A字43B45a-_*[]', StringUtils.FORMAT_ALL_LOWER_CASE);
更多信息在这里:
在此处在线玩:
https://turbocommons.org/en/app/stringutils/count-capital-letters
答案 6 :(得分:0)
另一种解决方案是使用Array.from()
创建一个包含str
每个字符的数组,然后使用reduce()
来计算大写字母的数量。
const str = 'HeLlO';
const res = Array.from(str).reduce((acc, char) => {
return acc += char.toUpperCase() === char;
}, 0);
console.log(res);