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.
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
You can use match() and regular expressions.
var str = "aBcD";
var numUpper = (str.match(/[A-Z]/g) || []).length; // 2
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))
isUpperCase
and isLowerCase
are not JavaScript functions.
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.
See the full jsFiddle here . I modified your code slightly because jsFiddle doesn't allow document.write
Another solution using CharCodeAt() method.
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.'))
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.
const str = 'HeLlO'; const res = Array.from(str).reduce((acc, char) => { return acc += char.toUpperCase() === char; }, 0); console.log(res);
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:
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
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.