javascript 计算字符串中的大小写字符
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/19171240/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Counting upper and lower case characters in a string
提问by James
First off, I know this is far from professional. I'm trying to learn how to work with strings. What this app is supposed to do is take a simple text input and do a few things with it:
首先,我知道这远非专业。我正在尝试学习如何使用字符串。这个应用程序应该做的是接受一个简单的文本输入并用它做一些事情:
count letters, count upper and lower case letters, count words and count spaces. Here is what I've done:
数字母,数大小写字母,数单词和数空格。这是我所做的:
<!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>
Made several changes due to users' suggestions. The problem now is that it won't let me treat 'text' like a string object.
根据用户的建议进行了一些更改。现在的问题是它不会让我将“文本”视为字符串对象。
采纳答案by asantaballa
Not sure if whole problem, but bad paren on this one
不确定是否是整个问题,但在这个问题上很糟糕
if(text.charAt(letters)) == " " && text(letters) < text.length)
^
Should be
应该
if(text.charAt(letters) == " ") && text(letters) < text.length)
^
And actually I'd make it
事实上我会做到的
if((text.charAt(letters) == " ") && (text(letters) < text.length))
回答by MrJ
Use regular expressions.
使用正则表达式。
Example
例子
var s = "thisIsAstring";
var numUpper = s.length - s.replace(/[A-Z]/g, '').length;
// numUpper = 2
Se more at JavaScript replace/regex
回答by Huy Tran
You can use match() and regular expressions.
您可以使用 match() 和正则表达式。
var str = "aBcD";
var numUpper = (str.match(/[A-Z]/g) || []).length; // 2
回答by jasonscript
isUpperCase
and isLowerCase
are not JavaScript functions.
isUpperCase
并且isLowerCase
不是 JavaScript 函数。
You can replace them with something like
你可以用类似的东西替换它们
var isUpperCase = function(letter) {
return letter === letter.toUpperCase();
};
var isLowerCase = function(letter) {
return letter === letter.toLowerCase();
};
There were a lot of syntax errors in your code which you need to check.
您的代码中有很多语法错误需要检查。
I was also getting confused with all your brackets so instead of using the charAt
I just referenced the string like an array. So instead of
text.charAt(letters)
I used
text[letters]
which I found easier to read.
我也对你所有的括号感到困惑,所以charAt
我没有使用我只是像数组一样引用字符串。所以
text.charAt(letters)
我没有使用
text[letters]
它,我发现它更容易阅读。
See the full jsFiddle here. I modified your code slightly because jsFiddle doesn't allow document.write
在这里查看完整的 jsFiddle 。我稍微修改了你的代码,因为 jsFiddle 不允许document.write
回答by Ashish
Another solution using CharCodeAt() method.
另一种使用 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.'))
回答by Jaume Mussons Abad
Most of the solutions here will fail when string contains UTF8 or diacritic characters. An improved version that works with all strings can be found at the turbocommons library, here:
当字符串包含 UTF8 或变音符号时,这里的大多数解决方案都会失败。可以在 turbocommons 库中找到适用于所有字符串的改进版本,这里:
Example:
例子:
// Returns 2
StringUtils.countByCase('1声A字43B45-_*[]', StringUtils.FORMAT_ALL_UPPER_CASE);
// Returns 1
StringUtils.countByCase('1声A字43B45a-_*[]', StringUtils.FORMAT_ALL_LOWER_CASE);
More info here:
更多信息在这里:
Play with it online here:
在这里在线玩:
https://turbocommons.org/en/app/stringutils/count-capital-letters
https://turbocommons.org/en/app/stringutils/count-capital-letters
回答by zb22
Another solution is using Array.from()
make an array which includes each character of str
and then using reduce()
to count the number of the uppercase letters.
另一种解决方案是使用Array.from()
make 一个包含每个字符的数组,str
然后使用它reduce()
来计算大写字母的数量。
const str = 'HeLlO';
const res = Array.from(str).reduce((acc, char) => {
return acc += char.toUpperCase() === char;
}, 0);
console.log(res);